home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #4 / Amiga Plus CD - 2000 - No. 4.iso / Tools / Commo-Support / Disk-Archive / includes-1_4.dms / includes-1_4.adf / doc.zoo / dos.doc < prev    next >
Encoding:
Text File  |  1989-12-19  |  100.7 KB  |  3,973 lines

  1. TABLE OF CONTENTS 10-10-88
  2.  
  3. dos.library/Close
  4. dos.library/CreateDir
  5. dos.library/CreateProc
  6. dos.library/CurrentDir
  7. dos.library/DateStamp
  8. dos.library/Delay
  9. dos.library/DeleteFile
  10. dos.library/DeviceProc
  11. dos.library/DupLock
  12. dos.library/Examine
  13. dos.library/Execute
  14. dos.library/Exit
  15. dos.library/ExNext
  16. dos.library/Info
  17. dos.library/Input
  18. dos.library/IoErr
  19. dos.library/IsInteractive
  20. dos.library/LoadSeg
  21. dos.library/Lock
  22. dos.library/Open
  23. dos.library/Output
  24. dos.library/ParentDir
  25. dos.library/Read
  26. dos.library/Rename
  27. dos.library/Seek
  28. dos.library/SetComment
  29. dos.library/SetProtection
  30. dos.library/UnLoadSeg
  31. dos.library/UnLock
  32. dos.library/WaitForChar
  33. dos.library/Write
  34.  
  35.  
  36. dos.library/Close
  37.  
  38.     NAME
  39.     Close -- Close an open file
  40.  
  41.     SYNOPSIS
  42.     Close( file )
  43.            D1
  44.  
  45.     struct FileHandle *file;
  46.  
  47.     FUNCTION
  48.     The file specified by the file handle is closed. You must close all
  49.     files you explicitly opened, but you must not close inherited file
  50.     handles that are passed to you (each filehandle must be closed once
  51.     and ONLY once).
  52.  
  53.     INPUTS
  54.     file - BCPL pointer to a file handle
  55.  
  56.     SEE ALSO
  57.     Open
  58.  
  59.  
  60. dos.library/CreateDir
  61.  
  62.     NAME
  63.     CreateDir -- Create a new directory
  64.  
  65.     SYNOPSIS
  66.     lock = CreateDir( name )
  67.     D0          D1
  68.  
  69.     struct FileLock *lock;
  70.     char *name;
  71.  
  72.     FUNCTION
  73.     CreateDir creates a new directory with the specified name. An error
  74.     is returned if it fails.  Directories can only be created on
  75.     devices which support them, e.g. disks.  A return of zero means
  76.     that AmigaDOS has found an error you should then call IoErr() to
  77.     find out more; otherwise, CreateDir returns an exclusive lock on
  78.     the new directory.
  79.  
  80.     INPUTS
  81.     name - pointer to a null-terminated string
  82.  
  83.     OUTPUTS
  84.     lock - BCPL pointer to a lock
  85.  
  86.  
  87. dos.library/CreateProc
  88.  
  89.     NAME
  90.  
  91.     CreateProc -- Create a new process
  92.  
  93.     SYNOPSIS
  94.     process = CreateProc( name, pri, segment, stackSize )
  95.     D0              D1    D2     D3      D4
  96.  
  97.     struct Process *process;
  98.     char *name;
  99.     LONG pri, stackSize;
  100.     BPTR *segment;
  101.  
  102.     FUNCTION
  103.     CreateProc cretes a new AmigaDOS process of name 'name'.  AmigaDOS
  104.     processes are a superset of exec tasks.
  105.  
  106.     A segment list, as returned by LoadSeg(), is passed as 'seglist'.
  107.     This represents a section of code which is to be run as a new
  108.     process. The code is entered at the first hunk in the segment list,
  109.     which should contain suitable initialization code or a jump to
  110.     such. A process control structure is allocated from memory and
  111.     initialized.  If you wish to fake a segment list (that will never
  112.     have DOS UnLoadSeg() called on it), use this code:
  113.  
  114.             ds.l    0    ;Align to longword
  115.             DC.L    16    ;Segment "length" (faked)
  116.             DC.L    0    ;Pointer to next segment
  117.             ...start of code...
  118.  
  119.     The size of the root stack upon activation is passed as
  120.     'stackSize'.  'pri' specifies the required priority of the new
  121.     process.  The result will be the process identifier of the new
  122.     process, or zero if the routine failed.  The argument 'name'
  123.     specifies the new process name.  A zero return code indicates
  124.     error.
  125.  
  126.     INPUTS
  127.     name - pointer to a null-terminated string
  128.     pri - signed integer
  129.     segment - BCPL pointer to a segment
  130.     stackSize - integer (must be a multiple of 4 bytes)
  131.  
  132.     OUTPUTS
  133.     process - process identifier
  134.  
  135.  
  136. dos.library/CurrentDir
  137.  
  138.     NAME
  139.     CurrentDir -- Make a directory associated with a lock the working directory
  140.  
  141.     SYNOPSIS
  142.     oldLock = CurrentDir( lock )
  143.     D0              D1
  144.  
  145.     struct FileLock *oldlock, *lock;
  146.  
  147.     FUNCTION
  148.     CurrentDir() causes a directory associated with a lock to be made
  149.     the current directory.    The old current directory lock is returned.
  150.  
  151.     A value of zero is a valid result here, this 0 lock represents the
  152.     root of file system that you booted from (which is, in effect, the
  153.     parent of all other file system roots.)
  154.  
  155.     INPUTS
  156.     lock - BCPL pointer to a lock
  157.  
  158.     OUTPUTS
  159.     oldLock - BCPL pointer to a lock
  160.  
  161.     SEE ALSO
  162.     Lock
  163.  
  164.  
  165. dos.library/DateStamp
  166.  
  167.     NAME
  168.     DateStamp -- Obtain the date and time in internal format
  169.  
  170.     SYNOPSIS
  171.     DateStamp( v );
  172.            D1
  173.  
  174.     LONG *v;
  175.  
  176.     FUNCTION
  177.     DateStamp() takes a vector of three longwords that is set to the
  178.     current time. The first element in the vector is a count of the
  179.     number of days. The second element is the number of minutes elapsed
  180.     in the day. The third is the number of ticks elapsed in the current
  181.     minute. A tick happens 50 times a second. DateStamp ensures that
  182.     the day and minute are consistent. All three elements are zero if
  183.     the date is unset. DateStamp() currently only returns even
  184.     multiples of 50 ticks. Therefore the time you get is always an even
  185.     number of ticks.
  186.  
  187.     INPUTS
  188.     v - pointer to an array of three longwords
  189.  
  190.     OUTPUTS
  191.     The array is filled as described.
  192.  
  193.  
  194. dos.library/Delay
  195.  
  196.     NAME
  197.     Delay -- Delay a process for a specified time
  198.  
  199.     SYNOPSIS
  200.     Delay( ticks )
  201.            D1
  202.  
  203.     LONG ticks;
  204.  
  205.     FUNCTION
  206.     The argument 'ticks' specifies how many ticks (50 per second) to
  207.     wait before returning control.
  208.  
  209.     BUGS
  210.     Due to a bug in the timer.device in V1.2/V1.3, specifying a timeout
  211.     of zero for Delay() can cause the unreliable timer & floppy disk
  212.     operation.
  213.  
  214.     INPUTS
  215.     ticks - integer
  216.  
  217.  
  218. dos.library/DeleteFile
  219.  
  220.     NAME
  221.     DeleteFile -- Delete a file or directory
  222.  
  223.     SYNOPSIS
  224.     success = DeleteFile( name )
  225.     D0              D1
  226.  
  227.     BOOL success;
  228.     char *name;
  229.  
  230.     FUNCTION
  231.     This attempts to delete the file or directory specified by 'name'.
  232.     An error is returned if the deletion fails. Note that all the files
  233.     within a directory must be deleted before the directory itself can
  234.     be deleted.
  235.  
  236.     INPUTS
  237.     name - pointer to a null-terminated string
  238.  
  239.     OUTPUTS
  240.     success - boolean
  241.  
  242.     SEE ALSO
  243.     IoErr
  244.  
  245.  
  246. dos.library/DeviceProc
  247.  
  248.     NAME
  249.     DeviceProc -- Return the process I.D. of specific I/O handler
  250.  
  251.     SYNOPSIS
  252.     process = DeviceProc( name )
  253.     D0              D1
  254.  
  255.     FUNCTION
  256.     DeviceProc() returns the process identifier of the process which
  257.     handles the device associated with the specified name. If no
  258.     process handler can be found then the result is zero. If the name
  259.     refers to a file on a mounted device then a pointer to a directory
  260.     lock is returned in IoErr().
  261.  
  262.  
  263. dos.library/DupLock
  264.  
  265.     NAME
  266.     DupLock -- Duplicate a lock
  267.  
  268.     SYNOPSIS
  269.     lock = DupLock( lock )
  270.     D0        D1
  271.  
  272.     struct FileLock *newlock, *lock;
  273.  
  274.     FUNCTION
  275.     DupLock() is passed a shared filing system lock.  This is the ONLY
  276.     way to obtain a duplicate of a lock... simply copying is not
  277.     allowed.
  278.  
  279.     Another lock to the same object is then returned.  It is not
  280.     possible to create a copy of a write lock.
  281.  
  282.     A zero return indicates failure.
  283.  
  284.     INPUTS
  285.     lock - BCPL pointer to a lock
  286.  
  287.     OUTPUTS
  288.     newLock - BCPL pointer to a lock
  289.  
  290.     SEE ALSO
  291.     Lock()
  292.  
  293.  
  294. dos.library/Examine
  295.  
  296.     NAME
  297.     Examine -- Examine a directory or file associated with a lock
  298.  
  299.     SYNOPSIS
  300.     success = Examine( lock, infoBlock )
  301.     D0           D1     D2
  302.  
  303.     BOOL success;
  304.     struct FileLock *lock;
  305.     struct FileInfoBlock *infoBlock
  306.  
  307.     FUNCTION
  308.     Examine() fills in information in the FileInfoBlock concerning the
  309.     file or directory associated with the lock. This information
  310.     includes the name, size, creation date and whether it is a file or
  311.     directory. FileInfoBlock must be longword aligned. Examine() gives
  312.     a return code of zero if it fails.
  313.  
  314.     You may make a local copy of the FileInfoBlock, as long as it is
  315.     never passed back to the operating system.
  316.  
  317.     INPUTS
  318.     lock - BCPL pointer to a lock
  319.     infoBlock - pointer to a FileInfoBlock (must be longword aligned)
  320.  
  321.     OUTPUTS
  322.     success - boolean
  323.  
  324.  
  325. dos.library/Execute
  326.  
  327.     NAME
  328.     Execute -- Execute a CLI command
  329.  
  330.     SYNOPSIS
  331.     success = Execute( commandString, input, output )
  332.     D0           D1          D2     D3
  333.  
  334.     BOOL success
  335.     char *commandString;
  336.     struct FileHandle *input, *output;
  337.  
  338.     FUNCTION
  339.     This function attempts to execute the string commandString as
  340.     though it were a CLI command and arguments. The string can contain
  341.     any valid input that you could type directly in a CLI, including
  342.     input and output redirection using < and >.
  343.  
  344.     The input file handle will normally be zero, and in this case
  345.     Execute() will perform whatever was requested in the commandString
  346.     and then return. If the input file handle is nonzero then after the
  347.     (possibly null) commandString is performed subsequent input is read
  348.     from the specified input file handle until end of that file is
  349.     reached.
  350.  
  351.     In most cases the output file handle must be provided, and is used
  352.     by the CLI commands as their output stream unless output
  353.     redirection was specified. If the output file handle is set to zero
  354.     then the current window, normally specified as *, is used. Note
  355.     that programs running under the Workbench do not normally have a
  356.     current window.
  357.  
  358.     Execute() may also be used to create a new interactive CLI process
  359.     just like those created with the NEWCLI function. In order to do
  360.     this you would call Execute() with an empty commandString, and pass
  361.     a file handle relating to a new window as the input file handle.
  362.     The output file handle would be set to zero. The CLI will read
  363.     commands from the new window, and will use the same window for
  364.     output. This new CLI window can only be terminated by using the
  365.     ENDCLI command.
  366.  
  367.     For this command to work the program RUN must be present in C:.
  368.  
  369.     INPUTS
  370.     commandString - pointer to a null-terminated string
  371.     input - BCPL pointer to a file handle
  372.     output - BCPL pointer to a file handle
  373.  
  374.     OUTPUTS
  375.     success - BOOLEAN indicating whether Execute was successful
  376.           in finding and starting the specified program
  377.  
  378.  
  379. dos.library/Exit
  380.  
  381.     NAME
  382.     Exit -- Exit from a program
  383.  
  384.     SYNOPSIS
  385.     Exit( returnCode )
  386.           D1
  387.  
  388.     LONG returnCode;
  389.  
  390.     FUNCTION
  391.     Exit() is currently for use with programs written as if they
  392.     were BCPL programs.  This function is not normally useful for
  393.     other purposes.
  394.     In general, therefore, please DO NOT CALL THIS FUNCTION!
  395.  
  396.     In order to exit, C programs should use the C language exit()
  397.     function (note the lower case letter "e").  Assembly programs should
  398.     place a return code in D0, and execute an RTS instruction.
  399.  
  400.     IMPLEMENTATION
  401.     The action of Exit() depends on whether the program which called it
  402.     is running as a command under a CLI or not. If the program is
  403.     running under the CLI the command finishes and control reverts to
  404.     the CLI. In this case, returnCode is interpreted as the return code
  405.     from the program.
  406.  
  407.     If the program is running as a distinct process, Exit() deletes the
  408.     process and release the space associated with the stack, segment
  409.     list and process structure.
  410.  
  411.     INPUTS
  412.     returnCode - integer
  413.  
  414.  
  415. dos.library/ExNext
  416.  
  417.     NAME
  418.     ExNext -- Examine the next entry in a directory
  419.  
  420.     SYNOPSIS
  421.     success = ExNext( lock, infoBlock )
  422.     D0          D1    D2
  423.  
  424.     BOOL success;
  425.     struct FileLock *lock;
  426.     struct FileInfoBlock *infoBlock;
  427.  
  428.     FUNCTION
  429.     This routine is passed a directory lock and a FileInfoBlock that
  430.     have been initialized by a previous call to Examine(), or updated
  431.     by a previous call to ExNext.  ExNext gives a return code of zero
  432.     on failure.  The most common cause of failure is reaching the end
  433.     of the list of files in the owning directory.  In this case, IoErr
  434.     will return ERROR_NO_MORE_ENTRIES and a good exit is appropriate.
  435.  
  436.     So, follow these steps to examine a directory:
  437.     1) Pass a Lock and a FileInfoBlock to Examine().  The Lock must
  438.        be on the directory you wish to examine.
  439.     2) Pass ExNext the same Lock and FileInfoBlock.
  440.     3) Do something with the information returned in the FileInfoBlock.  Note
  441.        that the type field is positive for directories, negative for files.
  442.     4) Keep calling ExNext until it returns FALSE.    Check IoErr()
  443.        to ensure that the reason for failure was ERROR_NO_MORE_ENTRIES.
  444.  
  445.     Note: if you wish to recursively scan the file tree and you find
  446.     another directory while ExNext'ing you must Lock that directory and
  447.     Examine() it using a new FileInfoBlock.  Use of the same
  448.     FileInfoBlock to enter a directory would lose important state
  449.     information such that it will be impossible to continue scanning
  450.     the parent directory.  While it is permissible to UnLock and Lock
  451.     the parent directory between ExNext calls, this is not recommended.
  452.     Important state information is associated with the parent lock so
  453.     if it is freed between ExNext calls this information has to be
  454.     rebuilt on each new ExNext call and will significantly slow down
  455.     directory scanning.
  456.  
  457.     It is NOT legal to Examine() a file, and then to ExNext from that
  458.     FileInfoBlock.    You may make a local copy of the FileInfoBlock, as
  459.     long as it is never passed back to the operating system.
  460.  
  461.     INPUTS
  462.     lock - BCPL pointer to a lock originally used for the Examine() call
  463.     infoBlock - pointer to a FileInfoBlock used on the previous Examine()
  464.             or ExNext() call.
  465.  
  466.     OUTPUTS
  467.     success - boolean
  468.  
  469.     SPECIAL NOTE
  470.     The FileInfoBlock must be longword aligned.
  471.  
  472.  
  473. dos.library/Info
  474.  
  475.     NAME
  476.     Info -- Returns information about the disk
  477.  
  478.     SYNOPSIS
  479.     success = Info( lock, parameterBlock )
  480.     D0        D1    D2
  481.  
  482.     struct FileLock *lock;
  483.     struct InfoData *parameterBlock
  484.  
  485.     FUNCTION
  486.     Info() can be used to find information about any disk in use.
  487.     'lock' refers to the disk, or any file on the disk. The parameter
  488.     block is returned with information about the size of the disk,
  489.     number of free blocks and any soft errors.
  490.  
  491.     INPUTS
  492.     lock - BCPL pointer to a lock
  493.     parameterBlock - pointer to an InfoData structure
  494.              (longword aligned)
  495.  
  496.     OUTPUTS
  497.     success - boolean
  498.  
  499.     SPECIAL NOTE:
  500.     Note that InfoData structure must be longword aligned.
  501.  
  502.  
  503. dos.library/IoErr
  504.  
  505.     NAME
  506.     IoErr -- Return extra information from the system
  507.  
  508.     SYNOPSIS
  509.     error = IoErr()
  510.       D0
  511.  
  512.     LONG error;
  513.  
  514.     FUNCTION
  515.     I/O routines return zero to indicate an error. When this happens,
  516.     this routine may be called to determine more information. It is
  517.     also used in some routines to pass back a secondary result.
  518.  
  519.     OUTPUTS
  520.     error - integer
  521.  
  522.     SEE ALSO
  523.     Open, Read, ExNext
  524.  
  525.  
  526. dos.library/Input
  527.  
  528.     NAME
  529.     Input -- Identify the program's initial input file handle
  530.  
  531.     SYNOPSIS
  532.     file = Input()
  533.     D0
  534.  
  535.     struct FileHandle *file;
  536.  
  537.     FUNCTION
  538.     Input() is used to identify the initial input stream allocated when
  539.     the program was initiated.
  540.  
  541.     OUTPUTS
  542.     file - BCPL pointer to a file handle
  543.  
  544.     SEE ALSO
  545.     Output()
  546.  
  547.  
  548. dos.library/IsInteractive
  549.  
  550.     NAME
  551.     IsInteractive -- Discover whether a file is a virtual terminal
  552.  
  553.     SYNOPSIS
  554.     status = IsInteractive( file )
  555.     D0            D1
  556.  
  557.     BOOL status;
  558.     struct FileHandle *file;
  559.  
  560.     FUNCTION
  561.     The return value 'status' indicates whether the file associated
  562.     with the file handle 'file' is connected to a virtual terminal.
  563.  
  564.     INPUTS
  565.     file - BCPL pointer to a file handle
  566.  
  567.     OUTPUTS
  568.     status - boolean
  569.  
  570.  
  571. dos.library/LoadSeg
  572.  
  573.     NAME
  574.     LoadSeg -- Load a load module into memory
  575.  
  576.     SYNOPSIS
  577.     segment = LoadSeg( name )
  578.     D0           D1
  579.  
  580.     BPTR segment;
  581.     char *name;
  582.  
  583.     FUNCTION
  584.     The file 'fileName' should be a load module produced by the linker.
  585.     LoadSeg scatter loads the CODE, DATA and BSS segments into memory,
  586.     chaining together the segments with BPTR's on their first words.
  587.     The end of the chain is indicated by a zero.
  588.  
  589.     In the event of an error any blocks loaded will be unloaded and a
  590.     FALSE (zero) result returned.
  591.  
  592.     If the module is correctly loaded then the output will be a pointer
  593.     at the beginning of the list of blocks. Loaded code is unloaded via
  594.     a call to UnLoadSeg().
  595.  
  596.     INPUTS
  597.     name - pointer to a null-terminated string
  598.  
  599.     OUTPUTS
  600.     segment - BCPL pointer to a segment
  601.  
  602.  
  603. dos.library/Lock
  604.  
  605.     NAME
  606.     Lock -- Lock a directory or file
  607.  
  608.     SYNOPSIS
  609.     lock  = Lock( name, accessMode )
  610.     D0          D1    D2
  611.  
  612.     struct FileLock *lock;
  613.     char *name;
  614.     LONG accessMode;
  615.  
  616.     FUNCTION
  617.     A filing system lock on the file or directory 'name' is returned if
  618.     possible.
  619.  
  620.     If the accessMode is ACCESS_READ, the lock is a shared read lock;
  621.     if the accessMode is ACCESS_WRITE then it is an exclusive write
  622.     lock.
  623.  
  624.     If Lock() fails (that is, if it cannot obtain a filing system lock
  625.     on the file or directory) it returns a zero. Note that the overhead
  626.     for doing a Lock() is less than that for doing an Open(), so that,
  627.     if you want to test to see if a file exists, you should use Lock().
  628.     Of course, once you've found that it exists, you must use Open() if
  629.     you want to open it.
  630.  
  631.     Tricky assumptions about the internal format of a lock are unwise.
  632.  
  633.     INPUTS
  634.     name - pointer to a null-terminated string
  635.     accessMode - integer
  636.  
  637.     OUTPUTS
  638.     lock - BCPL pointer to a lock
  639.  
  640.  
  641. dos.library/Open
  642.  
  643.     NAME
  644.     Open -- Open a file for input or output
  645.  
  646.     SYNOPSIS
  647.     file = Open( name, accessMode )
  648.     D0         D1    D2
  649.  
  650.     struct FileHandle *file;
  651.     char *name;
  652.     LONG accessMode;
  653.  
  654.     FUNCTION
  655.     The named file is opened and a file handle returned.  If the
  656.     accessMode is MODE_OLDFILE, an existing file is opened for reading
  657.     or writing. If the value is MODE_NEWFILE, a new file is created for
  658.     writing. MODE_READWRITE opens an old file with and exclusive lock.
  659.     Open types are documented in the "libraries/dos.h" include file.
  660.  
  661.     The 'name' can be a filename (optionally prefaced by a device
  662.     name), a simple device such as NIL:, a window specification such as
  663.     CON: or RAW: followed by window parameters, or *, representing the
  664.     current window.
  665.  
  666.     If the file cannot be opened for any reason, the value returned
  667.     will be zero, and a secondary error code will be available by
  668.     calling the routine IoErr().
  669.  
  670.     INPUTS
  671.     name - pointer to a null-terminated string
  672.     accessMode - integer
  673.  
  674.     OUTPUTS
  675.     file - BCPL pointer to a file handle
  676.  
  677.  
  678. dos.library/Output
  679.  
  680.     NAME
  681.     Output -- Identify the programs' initial output file handle
  682.  
  683.     SYNOPSIS
  684.     file = Output()
  685.     D0
  686.  
  687.     struct FileHandle *file;
  688.  
  689.     FUNCTION
  690.     Output() is used to identify the initial output stream allocated
  691.     when the program was initiated.
  692.  
  693.     OUTPUTS
  694.     file - BCPL pointer to a file handle
  695.  
  696.  
  697. dos.library/ParentDir
  698.  
  699.     NAME
  700.     ParentDir -- Obtain the parent of a directory or file
  701.  
  702.     SYNOPSIS
  703.     newlock = ParentDir( lock )
  704.     D0             D1
  705.  
  706.     struct FileLock *newlock, *lock;
  707.  
  708.     FUNCTION
  709.     The argument 'lock' is associated with a given file or directory.
  710.     ParentDir() returns 'newlock' which is associated the parent
  711.     directory of 'lock'.
  712.  
  713.     Taking the ParentDir() of the root of the current filing system
  714.     returns a NULL (0) lock.  Note this 0 lock represents the root of
  715.     file system that you booted from (which is, in effect, the parent
  716.     of all other file system roots.)
  717.  
  718.     INPUTS
  719.     lock - BCPL pointer to a lock
  720.  
  721.     OUTPUTS
  722.     newlock - BCPL pointer to a lock
  723.  
  724.  
  725. dos.library/Read
  726.  
  727.     NAME
  728.     Read -- Read bytes of data from a file
  729.  
  730.     SYNOPSIS
  731.     actualLength = Read( file, buffer, length )
  732.     D0             D1    D2       D3
  733.  
  734.     LONG actualLength;
  735.     struct FileHandle *file;
  736.     char *buffer;
  737.     LONG length;
  738.  
  739.     FUNCTION
  740.     Data can be copied using a combination of Read() and Write().
  741.     Read() reads bytes of information from an opened file (represented
  742.     here by the argument 'file') into the buffer given. The argument
  743.     'length' is the length of the buffer given.
  744.  
  745.     The value returned is the length of the information actually read.
  746.     So, when 'actualLength' is greater than zero, the value of
  747.     'actualLength' is the the number of characters read. Usually Read
  748.     will try to fill up your buffer before returning. A value of zero
  749.     means that end-of-file has been reached. Errors are indicated by a
  750.     value of -1. In any case, the value of IoErr() is also modified by
  751.     this call. If there was an error it gives more error information,
  752.     otherwise it indicates whether there is any more data in the file.
  753.  
  754.     INPUTS
  755.     file - BCPL pointer to a file handle
  756.     buffer - pointer to buffer
  757.     length - integer
  758.  
  759.     OUTPUTS
  760.     actualLength - integer
  761.  
  762.  
  763. dos.library/Rename
  764.  
  765.     NAME
  766.     Rename -- Rename a directory or file
  767.  
  768.     SYNOPSIS
  769.     success = Rename( oldName, newName )
  770.     D0          D1       D2
  771.  
  772.     BOOL success;
  773.     char *oldName, *newName;
  774.  
  775.     FUNCTION
  776.     Rename() attempts to rename the file or directory specified as
  777.     'oldName' with the name 'newName'. If the file or directory
  778.     'newName' exists, Rename() fails and returns an error. Both
  779.     'oldName' and the 'newName' can contain a directory specification.
  780.     In this case, the file will be moved from one directory to another.
  781.  
  782.     Note: it is impossible to Rename() a file from one volume to
  783.     another.
  784.  
  785.     INPUTS
  786.     oldName - pointer to a null-terminated string
  787.     newName - pointer to a null-terminated string
  788.  
  789.     OUTPUTS
  790.     success - boolean
  791.  
  792.  
  793. dos.library/Seek
  794.  
  795.     NAME
  796.     Seek -- Find and point at the logical position in a file
  797.  
  798.     SYNOPSIS
  799.     oldPosition = Seek( file, position, mode )
  800.     D0            D1      D2        D3
  801.  
  802.     LONG oldPosition, position, mode;
  803.     struct FileHandle *file;
  804.  
  805.     FUNCTION
  806.     Seek() sets the read/write cursor for the file 'file' to the
  807.     position 'position'. This position is used by both Read() and
  808.     Write() as a place to start reading or writing. The result is the
  809.     current absolute position in the file, or -1 if an error occurs, in
  810.     which case IoErr() can be used to find more information. 'mode' can
  811.     be OFFSET_BEGINNING, OFFSET_CURRENT or OFFSET_END. It is used to
  812.     specify the relative start position. For example, 20 from current
  813.     is a position 20 bytes forward from current, -20 is 20 bytes back
  814.     from current.
  815.  
  816.     So that to find out where you are, seek zero from current. The end
  817.     of the file is a Seek() positioned by zero from end. You cannot
  818.     Seek() beyond the end of a file.
  819.  
  820.     INPUTS
  821.     file - BCPL pointer to a file handle
  822.     position - integer
  823.     mode - integer
  824.  
  825.     OUTPUTS
  826.     oldPosition - integer
  827.  
  828.  
  829. dos.library/SetComment
  830.  
  831.     NAME
  832.     SetComment -- Change a files' comment string
  833.  
  834.     SYNOPSIS
  835.     success = SetComment( name, comment )
  836.     D0              D1    D2
  837.  
  838.     BOOL success;
  839.     char *name;
  840.     char *comment;
  841.  
  842.     FUNCTION
  843.     SetComment() sets a comment on a file or directory. The comment is
  844.     a pointer to a null-terminated string of up to 80 characters.
  845.  
  846.     INPUTS
  847.     name - pointer to a null-terminated string
  848.     comment - pointer to a null-terminated string
  849.  
  850.  
  851. dos.library/SetProtection
  852.  
  853.     NAME
  854.     SetProtection -- Set protection for a file or directory
  855.  
  856.     SYNOPSIS
  857.     success = SetProtection( name, mask )
  858.     D0             D1    D2:4
  859.  
  860.     BOOL success;
  861.     char *name;
  862.     LONG mask;
  863.  
  864.     FUNCTION
  865.     SetProtection() sets the protection attributes on a file or
  866.     directory. The lower bits of the mask are as follows:
  867.  
  868.     Bits 31-4 Reserved.
  869.     bit 4: 1 = file has not changed     0 = file has been changed
  870.     bit 3: 1 = reads not allowed,        0 = reads allowed.
  871.     bit 2: 1 = writes not allowed,        0 = writes allowed.
  872.     bit 1: 1 = execution not allowed,    0 = execution allowed.
  873.     bit 0: 1 = deletion not allowed,    0 = deletion allowed.
  874.  
  875.     Only delete is checked for by the Old Filing System.  The archive
  876.     bit is cleared by the file system whenever the file is changed.
  877.     Backup utilities will generally set the bit after backing up
  878.     each file.
  879.  
  880.     The new Fast Filing System looks at the read and write bits, and
  881.     the Shell looks at the execute bit, and will refuse to start
  882.     a file as a binary executable if it is set.
  883.  
  884.     Other bits may will be defined in the "libraries/dos.h" include
  885.     files.    Rather than referring to bits by number you should use the
  886.     definitions in "dos.h".
  887.  
  888.     INPUTS
  889.     name - pointer to a null-terminated string
  890.     mask - the protection mask required
  891.  
  892.     OUTPUTS
  893.     success - boolean
  894.  
  895.  
  896. dos.library/UnLoadSeg
  897.  
  898.     NAME
  899.     UnLoadSeg -- Unload a segment previously loaded by LoadSeg()
  900.  
  901.     SYNOPSIS
  902.     error = UnLoadSeg( segment )
  903.     D0           D1
  904.  
  905.     BOOL error;
  906.     BPTR segment;
  907.  
  908.     FUNCTION
  909.     Unload a segment loaded by LoadSeg().  'segment' may be zero.
  910.  
  911.     INPUTS
  912.     segment - BCPL pointer to a segment identifier
  913.  
  914.     OUTPUTS
  915.     error - boolean
  916.  
  917.  
  918. dos.library/UnLock
  919.  
  920.     NAME
  921.     UnLock -- Unlock a directory or file
  922.  
  923.     SYNOPSIS
  924.     UnLock( lock )
  925.         D1
  926.  
  927.     struct FileLock *lock;
  928.  
  929.     FUNCTION
  930.     The filing system lock [obtained from Lock(), DupLock(), or
  931.     CreateDir()] is removed and deallocated.
  932.  
  933.     INPUTS
  934.     lock - BCPL pointer to a lock
  935.  
  936.     NOTE
  937.     passing zero to UnLock() is harmless
  938.  
  939.  
  940. dos.library/WaitForChar
  941.  
  942.     NAME
  943.     WaitForChar -- Determine if chars arrive within a time limit
  944.  
  945.     SYNOPSIS
  946.     status = WaitForChar( file, timeout )
  947.     D0              D1    D2
  948.  
  949.     BOOL status;
  950.     struct FileHandle *file;
  951.     LONG timeout;
  952.  
  953.     FUNCTION
  954.     If a character is available to be read from 'file' within a the
  955.     time (in microseconds) indicated by 'timeout', WaitForChar()
  956.     returns -1 (TRUE). If a character is available, you can use Read()
  957.     to read it.  Note that WaitForChar() is only valid when the I/O
  958.     stream is connected to a virtual terminal device. If a character is
  959.     not available within 'timeout', a 0 (FALSE) is returned.
  960.  
  961.     BUGS
  962.     Due to a bug in the timer.device in V1.2/V1.3, specifying a timeout
  963.     of zero for WaitForChar() can cause the unreliable timer & floppy
  964.     disk operation.
  965.  
  966.     INPUTS
  967.     file - BCPL pointer to a file handle
  968.     timeout - integer
  969.  
  970.     OUTPUTS
  971.     status - boolean
  972.  
  973.  
  974. dos.library/Write
  975.  
  976.     NAME
  977.     Write -- Write bytes of data to a file
  978.  
  979.     SYNOPSIS
  980.     returnedLength =  Write( file, buffer, length )
  981.     D0             D1    D2      D3
  982.  
  983.     LONG returnedLength;
  984.     struct FileHandle *file;
  985.     char *buffer;
  986.     LONG length;
  987.  
  988.     FUNCTION
  989.     Write() writes bytes of data to the opened file 'file'. 'length'
  990.     indicates the length of data to be transferred; 'buffer' is a
  991.     pointer to the buffer. The value returned is the length of
  992.     information actually written. So, when 'length' is greater than
  993.     zero, the value of 'length' is the number of characters written.
  994.     Errors are indicated by a value of -1.
  995.  
  996.     INPUTS
  997.     file - BCPL pointer to a file handle
  998.     buffer - pointer to the buffer
  999.     length - integer
  1000.  
  1001.     OUTPUTS
  1002.     returnedLength - integer
  1003.  
  1004.  
  1005.  
  1006.             Enhancements for AmigaDos 1.4
  1007.                   by Randell Jesup
  1008.  
  1009. Legend:
  1010.  > Indicates an existing dos.library routine
  1011.  
  1012. BOOL means either FALSE or DOSTRUE (-1).
  1013.  
  1014.  
  1015. ******* dos.library/AllocDosObject ******************************************
  1016. *
  1017. *   NAME
  1018. *    AllocDosObject -- Creates a dos object
  1019. *
  1020. *   SYNOPSIS
  1021. *    ptr = AllocDosObject(type, tags)
  1022. *    D0                    D1    D2
  1023. *
  1024. *    void *AllocDosObject(ULONG, struct TagItem *)
  1025. *
  1026. *   FUNCTION
  1027. *    Create one of several dos objects, initializes it, and returns it
  1028. *    to you.  Note the DOS_STDPKT returns a pointer to the sp_Pkt of the
  1029. *    structure.
  1030. *
  1031. *   RESULT
  1032. *    packet - pointer to the object or NULL
  1033. *
  1034.  
  1035.  
  1036. ******* dos.library/FreeDosObject **********
  1037. *
  1038. *   NAME
  1039. *    FreeDosObject -- Frees an object allocated by AllocDosObject
  1040. *
  1041. *   SYNOPSIS
  1042. *    FreeDosObject(type, ptr)
  1043. *               D1   D2
  1044. *
  1045. *    void FreeDosObject(ULONG, void *)
  1046. *
  1047. *   FUNCTION
  1048. *    Frees an object allocated by AllocDosObject.  Do NOT call for objects
  1049. *    allocated in any other way.
  1050. *
  1051. *   INPUTS
  1052. *    type - type passed to AllocDosObject
  1053. *    ptr  - ptr returned by AllocDosObject
  1054. *
  1055.  
  1056. ======================
  1057. Packet Level routines:
  1058. ======================
  1059.  
  1060.  
  1061. ******* dos.library/DoPkt **********
  1062. *
  1063. *   NAME
  1064. *    DoPkt -- Send a dos packet and wait for reply
  1065. *
  1066. *   SYNOPSIS
  1067. *    result1 = DoPkt(port,action,arg1,arg2,arg3,arg4,arg5)
  1068. *    D0               D1    D2    D3   D4   D5   D6   D7
  1069. *
  1070. *    LONG = DoPkt(struct MsgPort *,LONG,LONG,LONG,LONG,LONG,LONG)
  1071. *
  1072. *   FUNCTION
  1073. *    Sends a packet to a handler and waits for it to return.  Any secondary
  1074. *    return will be available in D1 AND from IoErr().  DoPkt() will work
  1075. *    even if the caller is an exec task and not a process; however it will
  1076. *    be slower, and may fail for some additional reasons, such as being
  1077. *    unable to allocate a signal.  DoPkt uses your pr_MsgPort for the reply,
  1078. *    and will call pr_PktWait.
  1079. *
  1080. *   INPUTS
  1081. *    port    - pr_MsgPort of the handler process to send to.
  1082. *    action  - the action requested of the filesystem/handler
  1083. *    arg1, arg2, arg3, arg4,arg5 - arguments, depend on the action, may not
  1084. *           be required.
  1085. *
  1086. *   RESULT
  1087. *    result1 - the value returned in dp_Res1, or FALSE if there was some
  1088. *          problem in sending the packet or recieving it.
  1089. *
  1090. *   BUGS
  1091. *    Only allows 5 arguments to be specified.  For more arguments (packets
  1092. *    support a maximum of 7) create a packet and use SendPkt/WaitPkt.
  1093. *
  1094.  
  1095.  
  1096. ******* dos.library/SendPkt **********
  1097. *
  1098. *   NAME
  1099. *    SendPkt -- Sends a packet to a handler
  1100. *
  1101. *   SYNOPSIS
  1102. *    SendPkt(port, packet)
  1103. *         D1     D2
  1104. *
  1105. *    void SendPkt(struct MsgPort *,struct DosPacket *)
  1106. *
  1107. *   FUNCTION
  1108. *    Sends a packet to a handler and does not wait.  All fields in the
  1109. *    packet must be initialized before calling this routine.  Uses your
  1110. *    pr_MsgPort for the replyport and dp_Port.
  1111. *
  1112. *   INPUTS
  1113. *    port   - pr_MsgPort of handler process to send to.
  1114. *    packet - packet to send, must be initialized and have a message.
  1115. *
  1116.  
  1117.  
  1118. ******* dos.library/WaitPkt **********
  1119. *
  1120. *   NAME
  1121. *    WaitPkt -- Waits for a packet to arrive at your pr_MsgPort
  1122. *
  1123. *   SYNOPSIS
  1124. *    packet = WaitPkt()
  1125. *    D0
  1126. *
  1127. *    struct DosPacket *WaitPkt(void);
  1128. *
  1129. *   FUNCTION
  1130. *    Waits for a packet to arrive at your pr_MsgPort.  If anyone has
  1131. *    installed a packet wait function in pr_PktWait, it will be called.
  1132. *    The message will be automatically GetMsg()ed so that it is no longer on
  1133. *    the port.  It assumes the message is a dos packet.  It is NOT
  1134. *    guaranteed to clear the signal for the port.
  1135. *
  1136. *   RESULT
  1137. *    packet - the packet that arrived at the port (from ln_Name of message).
  1138. *
  1139.  
  1140.  
  1141. ******* dos.library/ReplyPkt **********
  1142. *
  1143. *   NAME
  1144. *    ReplyPkt -- replies a packet to the person who sent it to you
  1145. *
  1146. *   SYNOPSIS
  1147. *    ReplyPkt(packet, result1, result2)
  1148. *           D1      D2       D3
  1149. *
  1150. *    void ReplyPkt(struct DosPacket *, LONG, LONG)
  1151. *
  1152. *   FUNCTION
  1153. *    This returns a packet to the process which sent it to you.  In
  1154. *    addition, puts your pr_MsgPort address in dp_Port, so using ReplyPkt
  1155. *    again will send the message to you.  (This is used in "ping-ponging"
  1156. *    packets between two processes).  It uses result 1 & 2 to set the
  1157. *    dp_Res1 and dp_Res2 fields of the packet.
  1158. *
  1159. *   INPUTS
  1160. *    packet  - packet to reply, assumed to set up correctly.
  1161. *    result1 - first result
  1162. *    result2 - secondary result
  1163. *
  1164.  
  1165.  
  1166. NOT IMPLEMENTED IN 1.4:
  1167.  # AbortPkt(port)
  1168.              D1
  1169.    struct MsgPort *port;
  1170.  
  1171.    Aborts all packets who are to be returned to port.  Caveats are similar to 
  1172.    AbortIO - don't count on immediate aborting of packets, wait for them to
  1173.    actually come back.
  1174.  
  1175.    AbortPkt may not be implemented in 1.4, since there may not be any
  1176.    reasonable method to make it work.
  1177.  
  1178.  
  1179.  
  1180. ===================
  1181. Unbuffered File I/O
  1182. ===================
  1183.  > BPTR Open(char *, long);
  1184.  > void Close(BPTR);
  1185.  
  1186.     Now returns a BOOL: False for failure, non-False for Success.  The 
  1187. default file system will guarantee the file writes have been written to the
  1188. disk.
  1189.  
  1190.  > long Read(BPTR, char *, long);
  1191.  > long Write(BPTR, char *, long);
  1192.  > BPTR Input(void);
  1193.  > BPTR Output(void);
  1194.  > long Seek(BPTR, long, long);
  1195.  > long IsInteractive(BPTR);
  1196.  > long WaitForChar(BPTR, long);
  1197.  
  1198.  
  1199. ******* dos.library/SetFileSize **********
  1200. *
  1201. *   NAME
  1202. *    SetFileSize -- Sets the size of a file
  1203. *
  1204. *   SYNOPSIS
  1205. *    success = SetFileSize(fh, offset, mode)
  1206. *    D0                    D1    D2     D3
  1207. *
  1208. *    BOOL SetFileSize(BPTR, LONG, LONG)
  1209. *
  1210. *   FUNCTION
  1211. *    Changes the file size, truncating or extending as needed.  Not all
  1212. *    handlers will support this; be careful and check the return code.  If
  1213. *    the file is extended, no values should be assumed for the new bytes.
  1214. *
  1215. *   INPUTS
  1216. *    fh     - File to be truncated.
  1217. *    offset - Offset from position determined by mode.
  1218. *    mode   - One of OFFSET_BEGINNING, OFFSET_CURRENT, or OFFSET_END.
  1219. *
  1220. *   RESULT
  1221. *    success - Success/failure indicator
  1222. *
  1223.  
  1224.  
  1225. ******* dos.library/LockRecord **********
  1226. *
  1227. *   NAME
  1228. *    LockRecord -- Locks a portion of a file
  1229. *
  1230. *   SYNOPSIS
  1231. *    success = LockRecord(fh,offset,length,mode,timeout)
  1232. *    D0                   D1   D2     D3    D4    D5
  1233. *
  1234. *    ULONG LockRecord(BPTR,ULONG,ULONG,ULONG,ULONG)
  1235. *
  1236. *   FUNCTION
  1237. *    This locks a portion of a file for exclusive access.
  1238. *    Timeout is how long to wait in ticks (1/50 sec) for the record to be
  1239. *    available.
  1240. *    Valid modes are:
  1241. *        REC_EXCLUSIVE
  1242. *        REC_EXCLUSIVE_IMMED
  1243. *        REC_SHARED
  1244. *        REC_SHARED_IMMED
  1245. *    For the IMMEDIATE modes, timeout is ignored.
  1246. *
  1247. *   INPUTS
  1248. *    fh      - File handle for which to lock the record
  1249. *    offset  - Record start position
  1250. *    length  - Length of record in bytes
  1251. *    mode    - Type of lock requester
  1252. *    timeout - Timeout interval.  0 is legal.
  1253. *
  1254. *   RESULT
  1255. *    success - Success or failure
  1256. *
  1257.  
  1258.  
  1259. ******* dos.library/LockRecords **********
  1260. *
  1261. *   NAME
  1262. *    LockRecords -- Lock a series of records
  1263. *
  1264. *   SYNOPSIS
  1265. *    success = LockRecords(record_array,timeout)
  1266. *    D0                       D1           D2
  1267. *
  1268. *    BOOL LockRecords(struct RecordLock *,ULONG)
  1269. *
  1270. *   FUNCTION
  1271. *    This locks several records within a file for exclusive access.
  1272. *    Timeout is how long to wait in ticks for the records to be available.
  1273. *    The wait is pplied to each attempt to lock each record in the list.
  1274. *
  1275. *   INPUTS
  1276. *    record_array - List of records to be locked
  1277. *    timeout      - Timeout interval.  0 is legal
  1278. *
  1279. *   RESULT
  1280. *    success      - Success or failure
  1281. *
  1282.  
  1283.  
  1284. ******* dos.library/UnLockRecord **********
  1285. *
  1286. *   NAME
  1287. *    UnLockRecord -- Unlock a record
  1288. *
  1289. *   SYNOPSIS
  1290. *    success = UnLockRecord(fh,offset,length)
  1291. *    D0               D1   D2     D3
  1292. *
  1293. *    BOOL UnLockRecord(BPTR,ULONG,ULONG)
  1294. *
  1295. *   FUNCTION
  1296. *    This releases the specified lock on a file.  Note that you must use
  1297. *    the same filehandle you used to lock the record, and offset and length
  1298. *    must be the same values used to lock it.  Every LockRecord call must be
  1299. *    balanced with an UnLockRecord call.
  1300. *
  1301. *   INPUTS
  1302. *    fh      - File handle of locked file
  1303. *    offset  - Record start position
  1304. *    length  - Length of record in bytes
  1305. *
  1306. *   RESULT
  1307. *    success - Success or failure.
  1308. *
  1309.  
  1310. ******* dos.library/UnLockRecords **********
  1311. *
  1312. *   NAME
  1313. *    UnLockRecords -- Unlock a list of records
  1314. *
  1315. *   SYNOPSIS
  1316. *    success = UnLockRecords(record_array)
  1317. *    D0                     D1
  1318. *
  1319. *    BOOL UnLockRecords(struct RecordLock *)
  1320. *
  1321. *   FUNCTION
  1322. *    This releases an array of record locks obtained using LockRecords.
  1323. *    You should NOT modify the record_array while you have the records
  1324. *    locked.  Every LockRecords call must be balanced with an UnLockRecords
  1325. *    call.
  1326. *
  1327. *   INPUTS
  1328. *    record_array - List of records to be unlocked
  1329. *
  1330. *   RESULT
  1331. *    success      - Success or failure.
  1332. *
  1333.  
  1334.  
  1335.  
  1336. =================
  1337. Buffered File I/O
  1338. =================
  1339.  
  1340. ******* dos.library/SelectInput **********
  1341. *
  1342. *   NAME
  1343. *    SelectInput -- Select a filehandle as the default input channel
  1344. *
  1345. *   SYNOPSIS
  1346. *    old_fh = SelectInput(fh)
  1347. *    D0                   D1
  1348. *
  1349. *    BPTR SelectInput(BPTR)
  1350. *
  1351. *   FUNCTION
  1352. *    Set the current input as the default input for the process.
  1353. *    This changes the value returned by Input().  old_fh should
  1354. *    be closed or saved as needed.
  1355. *
  1356. *   INPUTS
  1357. *    fh     - Newly default input handle
  1358. *
  1359. *   RESULT
  1360. *    old_fh - Previous default input filehanldle
  1361. *
  1362.  
  1363.  
  1364. ******* dos.library/SelectOutput **********
  1365. *
  1366. *   NAME
  1367. *    SelectOutput -- Select a filehandle as the default input channel
  1368. *
  1369. *   SYNOPSIS
  1370. *    old_fh = SelectOutput(fh)
  1371. *    D0                    D1
  1372. *
  1373. *    BPTR SelectOutput(BPTR)
  1374. *
  1375. *   FUNCTION
  1376. *    Set the current output as the default output for the process.
  1377. *    This changes the value returned by Output().  old_fh should
  1378. *    be closed or saved as needed.
  1379. *
  1380. *   INPUTS
  1381. *    fh     - Newly desired output handle
  1382. *
  1383. *   RESULT
  1384. *    old_fh - Previous current output
  1385. *
  1386.  
  1387.  
  1388. ******* dos.library/FGetC **********
  1389. *
  1390. *   NAME
  1391. *    FGetC -- Read a character from the specified input channel (buffered)
  1392. *
  1393. *   SYNOPSIS
  1394. *    char = FGetC(fh)
  1395. *    D0         D1
  1396. *
  1397. *    LONG FGetC(BPTR)
  1398. *
  1399. *   FUNCTION
  1400. *    Reads the next character from the input stream.  A -1 is
  1401. *    returned when EOF or an error is encountered.
  1402. *
  1403. *   INPUTS
  1404. *    fh - filehandle to use for buffered I/O
  1405. *
  1406. *   RESULT
  1407. *    char - character read (0-255) or -1
  1408. *
  1409.  
  1410.  
  1411. ******* dos.library/FPutC **********
  1412. *
  1413. *   NAME
  1414. *    FPutC -- Write a character to the specified output channel (buffered)
  1415. *
  1416. *   SYNOPSIS
  1417. *    success = FPutC(fh, char)
  1418. *    D0              D1   D2
  1419. *
  1420. *    BOOL FPutC(BPTR, UBYTE)
  1421. *
  1422. *   FUNCTION
  1423. *    Writes a single character to the output stream.
  1424. *
  1425. *   INPUTS
  1426. *    fh    - filehandle to use for buffered I/O
  1427. *    char    - character to write
  1428. *
  1429. *   RESULT
  1430. *    success - success/failure flag
  1431. *
  1432. *   BUGS
  1433. *    Doesn't return success code yet
  1434. *
  1435.  
  1436.  
  1437. ******* dos.library/UnGetC **********
  1438. *
  1439. *   NAME
  1440. *    UnGetC -- Makes a character available for reading again. (buffered)
  1441. *
  1442. *   SYNOPSIS
  1443. *    value = UnGetC(fh, character)
  1444. *    D0           D1      D2
  1445. *
  1446. *    LONG UnGetC(BPTR, LONG)
  1447. *
  1448. *   FUNCTION
  1449. *    Pushes the character specified back into the input buffer.  Every
  1450. *    time you use a buffered read routine, you can always push back 1
  1451. *    character.  You may be able to push back more, though it is not
  1452. *    recommended, since there is no guarantee on how many can be
  1453. *    pushed back at a given moment.
  1454. *    Passing -1 for the character will cause the last character read to
  1455. *    be pushed back.
  1456. *
  1457. *   INPUTS
  1458. *    fh      - filehandle to use for buffered I/O
  1459. *    character - character to push back or -1
  1460. *
  1461. *   RESULT
  1462. *    value     - character pushed back, or FALSE if the character cannot
  1463. *            be pushed back.
  1464. *
  1465.  
  1466.  
  1467. ******* dos.library/FRead **********
  1468. *
  1469. *   NAME
  1470. *    FRead -- Reads a number of blocks from an input channel (buffered)
  1471. *
  1472. *   SYNOPSIS
  1473. *    count = FRead(fh, buf, blocklen, blocks)
  1474. *    D0          D1  D2     D3        D4
  1475. *
  1476. *    LONG FRead(BPTR, UBYTE *, ULONG, ULONG)
  1477. *
  1478. *   FUNCTION
  1479. *    Attempts to read a number of blocks, each blocklen long, into the
  1480. *    specified buffer from the input stream (buffered).  May return less
  1481. *    than the number of blocks requested, either due to EOF or when input
  1482. *    is an interactive stream.  A return of -1 indicates an error.
  1483. *
  1484. *   INPUTS
  1485. *    fh     - filehandle to use for buffered I/O
  1486. *    buf      - Area to read bytes into.
  1487. *    blocklen - number of bytes per block.  Must be > 0.
  1488. *    blocks     - number of blocks to read.  Must be > 0.
  1489. *
  1490. *   RESULT
  1491. *    count - Number of _blocks_ read, or 0 for EOF, or -1 for error.
  1492. *
  1493.  
  1494.  
  1495. ******* dos.library/FWrite **********
  1496. *
  1497. *   NAME
  1498. *    FWrite -- Writes a number of blocks to an output channel (buffered)
  1499. *
  1500. *   SYNOPSIS
  1501. *    count = FWrite(fh, buf, blocklen, blocks)
  1502. *    D0           D1  D2     D3        D4
  1503. *
  1504. *    LONG FWrite(BPTR, UBYTE *, ULONG, ULONG)
  1505. *
  1506. *   FUNCTION
  1507. *    Attempts to write a number of blocks, each blocklen long, from the
  1508. *    specified buffer to the output stream (buffered).  May return less
  1509. *    than the number of blocks requested, if there is some error such
  1510. *    as a full disk or r/w error.  A return of -1 indicates an error.
  1511. *
  1512. *   INPUTS
  1513. *    fh     - filehandle to use for buffered I/O
  1514. *    buf      - Area to write bytes from.
  1515. *    blocklen - number of bytes per block.  Must be > 0.
  1516. *    blocks     - number of blocks to read.  Must be > 0.
  1517. *
  1518. *   RESULT
  1519. *    count - Number of _blocks_ written, or -1 for error.
  1520. *
  1521.  
  1522.  
  1523. ******* dos.library/FGets **********
  1524. *
  1525. *   NAME
  1526. *    FGets -- Reads a line from the specified input channel (buffered)
  1527. *
  1528. *   SYNOPSIS
  1529. *    count = FGets(fh, buf, len)
  1530. *    D0            D1  D2   D3
  1531. *
  1532. *    LONG FGets(BPTR, UBYTE *, ULONG)
  1533. *
  1534. *   FUNCTION
  1535. *    This routine reads in a single line from the specified input stopping
  1536. *    at a NEWLINE character or EOF.  In either event, UP TO the number of
  1537. *    len specified bytes will be copied into the buffer.  Hence if a length
  1538. *    of 50 is passed and the input line is longer than 50 bytes, it will
  1539. *    return 50 characters.  The returned length indicates the number of bytes
  1540. *    put into the buffer.  If terminated by a newline, the newline WILL be
  1541. *    the last character in the bytes read.  This is a buffered read routine.
  1542. *    The characters read in are NOT null-terminated.
  1543. *
  1544. *   INPUTS
  1545. *    fh  - filehandle to use for buffered I/O
  1546. *    buf - Area to read bytes into.
  1547. *    len - Number of bytes to read, must be > 0.
  1548. *
  1549. *   RESULT
  1550. *    count - Number of bytes read, or 0 for immediate EOF, or -1 for error.
  1551. *
  1552.  
  1553.  
  1554. ******* dos.library/FPuts **********
  1555. *
  1556. *   NAME
  1557. *    FPuts -- Writes a string the the specified output channel (buffered)
  1558. *
  1559. *   SYNOPSIS
  1560. *    count = FPuts(fh, str)
  1561. *    D0            D1  D2
  1562. *
  1563. *    LONG FPuts(BPTR, UBYTE *)
  1564. *
  1565. *   FUNCTION
  1566. *    This routine writes an unformatted string to the filehandle.  No 
  1567. *    newline is appended to the string and the length is returned.
  1568. *
  1569. *   INPUTS
  1570. *    fh  - filehandle to use for buffered I/O
  1571. *    str   - Null-terminated string to be written to default output
  1572. *
  1573. *   RESULT
  1574. *    count - Number of bytes written.  -1 indicates an error
  1575. *
  1576.  
  1577.  
  1578. ******* dos.library/PutStr **********
  1579. *
  1580. *   NAME
  1581. *    PutStr -- Writes a string the the default output channel (buffered)
  1582. *
  1583. *   SYNOPSIS
  1584. *    count = PutStr(str)
  1585. *    D0             D1
  1586. *
  1587. *    LONG PutStr(UBYTE *)
  1588. *
  1589. *   FUNCTION
  1590. *    This routine writes an unformatted string to the default output.  No 
  1591. *    newline is appended to the string and the length is returned.
  1592. *
  1593. *   INPUTS
  1594. *    str   - Null-terminated string to be written to default output
  1595. *
  1596. *   RESULT
  1597. *    count - Number of bytes written.  -1 indicates an error
  1598. *
  1599.  
  1600.  
  1601. ******* dos.library/VPrintf **********
  1602. *
  1603. *   NAME
  1604. *    VPrintf -- format and print string (buffered)
  1605. *
  1606. *   SYNOPSIS
  1607. *    count = VPrintf(fmt, argv)
  1608. *      D0            D1   D2
  1609. *
  1610. *    LONG VPrintf(char *, long[])
  1611. *
  1612. *   FUNCTION
  1613. *    Writes the formatted string and values to Output().  This routine is 
  1614. *    assumed to handle all internal buffering so that the formatting string
  1615. *    and resultant formatted values can be arbitrarily long.  Any secondary
  1616. *    error code is returned in IoErr().
  1617. *
  1618. *   INPUTS
  1619. *    fmt    - RawDoFmt style formatting string
  1620. *    argv[] - Pointer to array of formatting values
  1621. *   
  1622. *   RESULT
  1623. *    count  - Number of bytes written or -1 for error
  1624. *
  1625.  
  1626.  
  1627. ******* dos.library/VFPrintf **********
  1628. *
  1629. *   NAME
  1630. *    VFPrintf -- format and print a string to a file (buffered)
  1631. *
  1632. *   SYNOPSIS
  1633. *    count = VFPrintf(fh, fmt, argv)
  1634. *    D0               D1  D2    D3
  1635. *
  1636. *    LONG VFPrintf(BPTR, char *, long[])
  1637. *
  1638. *   FUNCTION
  1639. *    Writes the formatted string and values to the given file.  This
  1640. *    routine is assumed to handle all internal buffering so that the
  1641. *    formatting string and resultant formatted values can be arbitrarily
  1642. *    long.  Any secondary error code is returned in IoErr().
  1643. *
  1644. *   INPUTS
  1645. *    fh     - File to write to
  1646. *    fmt    - RawDoFmt style formatting string
  1647. *    argv[] - Pointer to array of formatting values
  1648. *
  1649. *   RESULT
  1650. *    count  - Number of bytes written or -1 for error
  1651. *
  1652.  
  1653.  
  1654. ******* dos.library/VFWritef ***************
  1655. *
  1656. *   NAME
  1657. *    VFWritef - write a BCPL formatted string to a filehandle (buffered)
  1658. *
  1659. *   SYNOPSIS
  1660. *    count = VFWritef(fh, fmt, argv)
  1661. *    D0               D1  D2    D3
  1662. *
  1663. *    LONG VFWritef(BPTR, char *, LONG *)
  1664. *
  1665. *   FUNCTION
  1666. *    Writes the formatted string and values to the default output.  This
  1667. *    routine is assumed to handle all internal buffering so that the
  1668. *    formatting string and resultant formatted values can be arbitrarily
  1669. *    long.  The formats are in BCPL form.
  1670. *
  1671. *   INPUTS
  1672. *    fmt   - BCPL style formatting string
  1673. *    argv  - Pointer to array of formatting values
  1674. *
  1675. *   RESULT
  1676. *    count - Number of bytes written or -1 for error
  1677. *
  1678.    
  1679.  
  1680. ******* dos.library/Flush ************
  1681. *
  1682. *   NAME
  1683. *    Flush -- Flushes a writes to a buffered filehandle
  1684. *
  1685. *   SYNOPSIS
  1686. *    success = Flush(fh)
  1687. *    D0        D1
  1688. *
  1689. *    BOOL Flush(BPTR)
  1690. *
  1691. *   FUNCTION
  1692. *    Flushes any pending buffered writes to the filehandle.  All buffered
  1693. *    writes will also be flushed on Close().
  1694. *
  1695. *   INPUTS
  1696. *    fh    - Filehandle to flush.
  1697. *
  1698. *   RESULT
  1699. *    success - Success of failure.
  1700. *
  1701.  
  1702.  
  1703.  
  1704. =================
  1705. Object Management
  1706. =================
  1707.  > long DeleteFile(char *);
  1708.  > long Rename(char *, char *);
  1709.  > BPTR Lock(char *, long);
  1710.  > void UnLock(BPTR);
  1711.  > BPTR DupLock(BPTR);
  1712.  > long Examine(BPTR, struct FileInfoBlock *);
  1713.  > long ExNext(BPTR, struct FileInfoBlock *);
  1714.  > long Info(BPTR, struct InfoData *);
  1715.  > BPTR CreateDir(char *);
  1716.  > long SetComment(char *, char *);
  1717.  > long SetProtection(char *, long);
  1718.  > BPTR ParentDir(BPTR);
  1719.  
  1720.  
  1721. ******* dos.library/ChangeMode ************
  1722. *
  1723. *   NAME
  1724. *    ChangeMode - Change the current mode of a lock or filehandle
  1725. *
  1726. *   SYNOPSIS
  1727. *    success = ChangeMode(type, object, newmode)
  1728. *    D0                    D1     D2      D3
  1729. *
  1730. *    BOOL ChangeMode(ULONG, BPTR, ULONG)
  1731. *
  1732. *   FUNCTION
  1733. *    This allows you to attempt to change the mode in use by a lock or
  1734. *    filehandle.  For example, you could attempt to turn a shared lock
  1735. *    into an exclusive lock.  The handler may well reject this request.
  1736. *    Warning: if you use the wrong type for the object, the system may
  1737. *    crash.
  1738. *
  1739. *   INPUTS
  1740. *    type    - Either CHANGE_FH or CHANGE_LOCK
  1741. *    object  - A lock or filehandle
  1742. *    newmode - The new mode you want
  1743. *
  1744. *   RESULT
  1745. *    success - Boolean
  1746. *
  1747.  
  1748.  
  1749. ******* dos.library/DupLockFromFH ******************
  1750. *
  1751. *   NAME
  1752. *    DupLockFromFH -- Gets a lock on an open file
  1753. *
  1754. *   SYNOPSIS
  1755. *    lock = DupLockFromFH(fh)
  1756. *    D0                   D1
  1757. *
  1758. *    BPTR DupLockFromFH(BPTR)
  1759. *
  1760. *   FUNCTION
  1761. *    Obtain a lock on the object associated with fh.  Only works if the
  1762. *    file was opened using a non-exclusive mode.
  1763. *
  1764. *   INPUTS
  1765. *    fh   - Opened file for which to obtain the lock
  1766. *
  1767. *   RESULT
  1768. *    lock - Obtained lock or NULL for failure
  1769. *
  1770.  
  1771.  
  1772. ******* dos.library/OpenFromLock ************
  1773. *
  1774. *   NAME
  1775. *    OpenFromLock -- Opens a file you have a lock on
  1776. *
  1777. *   SYNOPSIS
  1778. *    fh = OpenFromLock(lock,mode)
  1779. *    D0                 D1   D2
  1780. *
  1781. *    BPTR OpenFromLock(BPTR,LONG)
  1782. *
  1783. *   FUNCTION
  1784. *    Given a lock, this routine performs an open on that lock. You must not
  1785. *    UnLock the lock until you Close the file!
  1786. *
  1787. *   INPUTS
  1788. *    lock - Lock on object to be opened.
  1789. *    mode - Type of Open() - see Open()
  1790. *
  1791. *   RESULT
  1792. *    fh   - Newly opened file handle or NULL for failure.
  1793. *
  1794.  
  1795.  
  1796. ******* dos.library/ParentOfFH ************
  1797. *
  1798. *   NAME
  1799. *    ParentOfFH -- returns a lock on the parent directory of an open file
  1800. *
  1801. *   SYNOPSIS
  1802. *    lock = ParentOfFH(fh)
  1803. *    D0               D1
  1804. *
  1805. *    BPTR ParentOfFH(BPTR)
  1806. *
  1807. *   FUNCTION
  1808. *    Returns a shared lock on the parent directory of the filehandle.
  1809. *
  1810. *   INPUTS
  1811. *    fh   - Filehandle you want the parent of.
  1812. *
  1813. *   RESULT
  1814. *    lock - Lock on parent directory of the filehandle or NULL for failure.
  1815. *
  1816.  
  1817.  
  1818. ******* dos.library/ExamineFH ************
  1819. *
  1820. *   NAME
  1821. *    ExamineFH -- Gets information on an open file
  1822. *
  1823. *   SYNOPSIS
  1824. *    rc = ExamineFH(fh, fib)
  1825. *    D0             D1  D2
  1826. *
  1827. *    BOOL ExamineFH(BPTR, struct FileInfoBlock *)
  1828. *
  1829. *   FUNCTION
  1830. *    Examines a filehandle and returns information about the file in the
  1831. *    FileInfoBlock.
  1832. *
  1833. *   INPUTS
  1834. *    fh  - Filehandle you wish to examine
  1835. *    fib - Must be longword aligned.
  1836. *
  1837. *   RESULT
  1838. *    rc  - Success/failure indication
  1839. *
  1840.  
  1841.  
  1842. ******* dos.library/SetFileDate ************
  1843. *
  1844. *   NAME
  1845. *    SetFileDate -- Sets the modification date for a file or directory
  1846. *
  1847. *   SYNOPSIS
  1848. *    rc = SetFileDate(name, date)
  1849. *    D0                D1    D2
  1850. *
  1851. *    BOOL SetFileDate(char *, struct DateStamp *)
  1852. *
  1853. *   FUNCTION
  1854. *    Sets the file date for a file or directory.  Note that for the Old
  1855. *    File System and the Fast File System, the date of the root directory
  1856. *    cannot be set.  Other filesystems may not support setting the date
  1857. *    for all files/directories.
  1858. *
  1859. *   INPUTS
  1860. *    name - Name of object
  1861. *    date - New modification date
  1862. *
  1863. *   RESULT
  1864. *    rc   - Success/failure indication
  1865. *
  1866.  
  1867.  
  1868. ******* dos.library/NameFromLock ************
  1869. *
  1870. *   NAME
  1871. *    NameFromLock -- Returns the name of a locked object
  1872. *
  1873. *   SYNOPSIS
  1874. *    rc = NameFromLock(lock, buffer, len)
  1875. *    D0                 D1     D2    D3
  1876. *
  1877. *    BOOL NameFromLock(BPTR, char *, LONG)
  1878. *
  1879. *   FUNCTION
  1880. *    Returns a fully qualified path for the lock.  This routine is
  1881. *    guaranteed not to write more than len characters into the buffer.  The
  1882. *    name will be null-terminated.
  1883. *
  1884. *   INPUTS
  1885. *    lock   - Lock of object to be examined.
  1886. *    buffer - Buffer to store name.
  1887. *    len    - Length of buffer.
  1888. *
  1889. *   RESULT
  1890. *    rc     - Success/failure indicator.
  1891. *
  1892.  
  1893.  
  1894. ******* dos.library/NameFromFH ************
  1895. *
  1896. *   NAME
  1897. *    NameFromFH -- Return the name of an object associated with a filehandle
  1898. *
  1899. *   SYNOPSIS
  1900. *    rc = NameFromFH(fh, buffer, len)
  1901. *    D0              D1    D2    D3
  1902. *
  1903. *    BOOL NameFromFH(BPTR, char *, LONG)
  1904. *
  1905. *   FUNCTION
  1906. *    Returns a fully qualified path for the filehandle.  This routine is
  1907. *    guaranteed not to write more than len characters into the buffer.  The
  1908. *    name will be null-terminated.
  1909. *
  1910. *   INPUTS
  1911. *    fh     - Lock of object to be examined.
  1912. *    buffer - Buffer to store name.
  1913. *    len    - Length of buffer.
  1914. *
  1915. *   RESULT
  1916. *    rc     - Success/failure indicator.
  1917. *
  1918.  
  1919.  
  1920. ******* dos.library/SplitName ************
  1921. *
  1922. *   NAME
  1923. *    SplitName -- splits out a component of a pathname into a buffer
  1924. *
  1925. *   SYNOPSIS
  1926. *    newpos = SplitName(name, separator, buf, oldpos, size)
  1927. *    D0                  D1      D2      D3     D4     D5
  1928. *
  1929. *    WORD SplitName(UBYTE *, UBYTE, UBYTE *, WORD, LONG)
  1930. *
  1931. *   FUNCTION
  1932. *    This routine splits out the next piece of a name from a given file
  1933. *    name.  Each piece is copied into the buffer, truncating at size-1
  1934. *    characters.  The new position is then returned so that it may be
  1935. *    passed in to the next call to splitname.  If the separator is not
  1936. *    found within 'size' characters, then size-1 characters plus a null will
  1937. *    be put into the buffer, and the position of the next separator will
  1938. *    be returned.
  1939. *    If a a separator cannot be found, -1 is returned (but the characters
  1940. *    from the old position to the end of the string are copied into the
  1941. *    buffer, up to a maximum of size-1 characters).  Both strings are
  1942. *    null-terminated.
  1943. *
  1944. *   INPUTS
  1945. *    name      - Filename being parsed.
  1946. *    separator - Separator charactor to split by.
  1947. *    buf       - Buffer to hold separated name.
  1948. *    oldpos    - Current position in the file.
  1949. *    size       - Size of buf in bytes (including null termination);
  1950. *
  1951. *   RESULT
  1952. *    newpos    - New position for next call to splitname.  -1 for last one.
  1953. *
  1954.  
  1955.  
  1956.  
  1957. ******* dos.library/SameLock ************
  1958. *
  1959. *   NAME
  1960. *    SameLock -- returns whether two locks are on the same object.
  1961. *
  1962. *   SYNOPSIS
  1963. *    value = SameLock(lock1, lock2)
  1964. *    D0          D1     D2
  1965. *
  1966. *    LONG SameLock(BPTR, BPTR)
  1967. *
  1968. *   FUNCTION
  1969. *    Compares two locks.  Returns LOCK_SAME if they are on the same object,
  1970. *    LOCK_SAME_HANDLER if on different objects on the same handler, and
  1971. *    LOCK_DIFFERENT if they are on different handlers.
  1972. *
  1973. *   INPUTS
  1974. *    lock1 - 1st lock for comparison
  1975. *    lock2 - 2nd lock for comparison
  1976. *
  1977. *   RESULT
  1978. *    value -    LOCK_SAME, LOCK_SAME_HANDLER, LOCK_DIFFERENT
  1979. *
  1980.  
  1981.  
  1982. ******* dos.library/ExAll ************
  1983. *
  1984. *   NAME
  1985. *    ExAll -- Examine an entire directory
  1986. *
  1987. *   SYNOPSIS
  1988. *    success = ExAll(lock, buffer, size, type, control)
  1989. *    D0               D1     D2     D3    D4     D5
  1990. *
  1991. *    BOOL ExAll(BPTR,UBYTE *,LONG,LONG,struct ExAllControl *)
  1992. *
  1993. *   FUNCTION
  1994. *    Examines an entire directory.  
  1995. *
  1996. * Lock must be on a directory.  Size is the size of the buffer supplied.
  1997. * The buffer will be filled with (partial) ExAllData structures, as
  1998. * specified by the type field.
  1999. *
  2000. * Type is a value from those shown below that determines which information is
  2001. * to be stored in the buffer.  Each higher value adds a new thing to the list
  2002. * as described in the table below:-
  2003. *
  2004. *    ED_NAME        FileName
  2005. *    ED_TYPE        Type
  2006. *    ED_SIZE        Size in bytes
  2007. *    ED_PROTECTION    Protection bits
  2008. *    ED_DATE        3 longwords of date
  2009. *    ED_COMMENT    Comment (will be NULL if no comment)
  2010. *
  2011. * Thus, ED_NAME gives only filenames, and ED_COMMENT gives everything.
  2012. *
  2013. * The control structure is required so that FFS can keep track if more than
  2014. * one call to ExAll is required.  This happens when there are more names in
  2015. * a directory than will fit into the buffer.  The format of the control
  2016. * structure is as follows:-
  2017. *
  2018. * NOTE: the control structure MUST be allocated by AllocDosObject!!!
  2019. *
  2020. * Entries:  This field tells the calling application how many entries are
  2021. *        in the buffer after calling ExAll.
  2022. *
  2023. * LastKey:  This field ABSOLUTELY MUST be initialised to 0 before calling
  2024. *        ExAll for the first time.  Any other value will cause nasty
  2025. *        things to happen.  If ExAll doesn't return ERROR_NO_MORE_ENTRIES,
  2026. *        then this field should not be touched before making the second
  2027. *        and subsequent calls to ExAll.  Whenever ExAll returns TRUE, there
  2028. *        are more calls required before all names have been received.
  2029. *        As soon as a FALSE return is received (and IOErr says no_more..)
  2030. *        then ExAll has completed.
  2031. *
  2032. * MatchString
  2033. *        if this field is NULL then all filenames will be returned.  If
  2034. *        this field is non-null then it is interpreted as a pointer to
  2035. *        a string that is used to pattern match all file names before
  2036. *        accepting them and putting them into the buffer.  The default
  2037. *        AmigaDOS pattern match routine is used unless......
  2038. *
  2039. * MatchFunc: 
  2040. *        Contains a pointer to a hook for a routine to decide if the entry
  2041. *        will be included in the returned list of entries.  The entry is
  2042. *        filled out first, and then passed to the hook.  If no MatchFunc is
  2043. *        to be called then this entry should be NULL.  The hook is
  2044. *        called with the following parameters (as is standard for hooks):
  2045. *
  2046. *        BOOL = MatchFunc( hookptr, data, typeptr )
  2047. *                a0    a1    a2
  2048. *        (a0 = ptr to hook, a1 = ptr to filled in ExAllData, a2 = ptr
  2049. *         to longword of type).
  2050. *
  2051. *        MatchFunc should return FALSE if the entry is not to be
  2052. *        accepted, otherwise return TRUE.
  2053. *
  2054. *   INPUTS
  2055. *    lock    - Lock on directory to be examined.
  2056. *    ...
  2057. *
  2058. *   RESULT
  2059. *    success - Success/failure of the call.
  2060. *
  2061.  
  2062.  
  2063.  
  2064. ==============
  2065. Error Handling
  2066. ==============
  2067.  > long IoErr(void);
  2068.  
  2069.  
  2070. ******* dos.library/SetIoErr ************
  2071. *
  2072. *   NAME
  2073. *    SetIoErr -- Sets the value returned by IoErr()
  2074. *
  2075. *   SYNOPSIS
  2076. *    SetIoErr(code)
  2077. *          D1
  2078. *
  2079. *    void SetIoErr(LONG);
  2080. *
  2081. *   FUNCTION
  2082. *    This routine sets up the secondary result (pr_Result2) return code 
  2083. *    (returned by the IoErr() function).
  2084. *
  2085. *   INPUTS
  2086. *    code - Code to be returned by a call to IoErr.
  2087. *
  2088.  
  2089.  
  2090. ******* dos.library/Fault ************
  2091. *
  2092. *   NAME
  2093. *    Fault -- Returns the text associated with a DOS error code
  2094. *
  2095. *   SYNOPSIS
  2096. *    rc = Fault(code, header, buffer, len)
  2097. *    D0          D1     D2      D3     D4
  2098. *
  2099. *    BOOL Fault(LONG, UBYTE *, UBYTE *, LONG)
  2100. *
  2101. *   FUNCTION
  2102. *    This routine obtains the error message text for the given error code.
  2103. *    The header is prepended to the text of the error message, followed
  2104. *    by a colon.  Requires the program C:Fault to exist.  Puts a null-
  2105. *    terminated string for the error message into the buffer.  By convention,
  2106. *    error messages should be no longer than 80 characters (+1 for termin-
  2107. *    ation), and preferably no more than 60.
  2108. *    The value returned by IoErr() is set to the code passed in.
  2109. *
  2110. *   INPUTS
  2111. *    code   - Error code
  2112. *    header - header to output before error text
  2113. *    buffer - Buffer to receive error message.  MUST BE LONGWORD ALIGNED!
  2114. *    len    - Length of the buffer.
  2115. *
  2116. *   RESULT
  2117. *    rc     - Success/failure code.  On failure, the text for the error
  2118. *         message will be "Error code <number>\n".
  2119. *
  2120.  
  2121.  
  2122. ******* dos.library/PrintFault ************
  2123. *
  2124. *   NAME
  2125. *    PrintFault -- Returns the text associated with a DOS error code
  2126. *
  2127. *   SYNOPSIS
  2128. *    rc = PrintFault(code, header)
  2129. *    D0              D1     D2   
  2130. *
  2131. *    BOOL PrintFault(LONG, UBYTE *)
  2132. *
  2133. *   FUNCTION
  2134. *    This routine obtains the error message text for the given error code.
  2135. *    This is similar to the Fault() function, except that the output is
  2136. *    written to the default output channel with buffered output.
  2137. *    The value returned by IoErr() is set to the code passed in.
  2138. *
  2139. *   INPUTS
  2140. *    code   - Error code
  2141. *    header - header to output before error text
  2142. *
  2143. *   RESULT
  2144. *    rc     - Success/failure code.  On failure, the text for the error
  2145. *         message will be "Error code <number>\n".
  2146. *
  2147.  
  2148.  
  2149. ******* dos.library/ErrorReport ************
  2150. *
  2151. *   NAME
  2152. *    ErrorReport -- Displays a Retry/Cancel requester for an error code
  2153. *
  2154. *   SYNOPSIS
  2155. *    status = ErrorReport(code, type, arg1, device)
  2156. *    D0                    D1    D2    D3     A0
  2157. *
  2158. *    BOOL ErrorReport(LONG, LONG, ULONG, struct MsgPort *)
  2159. *
  2160. *   FUNCTION
  2161. *    Based on the request type, this routine formats the appropriate
  2162. *    requester to be displayed.  If the code is not understood, it returns
  2163. *    DOS_TRUE immediately.  Returns DOS_TRUE if the user selects CANCEL or
  2164. *    if the attempt to put up the requester fails, or if the process
  2165. *    pr_WindowPtr is -1.  Returns FALSE if the user selects Retry.  The
  2166. *    routine will retry on DISKINSERTED for appropriate error codes.
  2167. *
  2168. *   INPUTS
  2169. *    code   - Error code to put a requester up for.
  2170. *       Current valid error codes are:
  2171. *        ERROR_DISK_NOT_VALIDATED
  2172. *        ERROR_DISK_WRITE_PROTECTED
  2173. *        ERROR_DISK_FULL
  2174. *        ERROR_DEVICE_NOT_MOUNTED
  2175. *        ERROR_NOT_A_DOS_DISK
  2176. *        ERROR_NO_DISK
  2177. *        ABORT_DISK_ERROR    /* read/write error */
  2178. *        ABORT_BUSY        /* you MUST replace... */
  2179. *    type   - Request type:
  2180. *                       REPORT_LOCK   - arg1 is a lock (BPTR).
  2181. *                       REPORT_FH     - arg1 is a filehandle (BPTR).
  2182. *            REPORT_VOLUME - arg1 is a volumenode (C pointer).
  2183. *    arg1   - variable parameter (see type)
  2184. *    device - (Optional) Address of handler task for which report is to be 
  2185. *                made.  Only required for REPORT_LOCK, and only if arg1==NULL.
  2186. *
  2187. *   RESULT
  2188. *    status - Cancel/Retry indicator (DOS_TRUE == Cancel)
  2189. *
  2190.  
  2191.  
  2192.  
  2193. ==================
  2194. Process Management
  2195. ==================
  2196.  > struct MsgPort *CreateProc(char *, long, BPTR, long);
  2197.                         (Obsolete, see CreateNewProc)
  2198.  > long Execute(char *, BPTR, BPTR);
  2199.  > void Exit(long);
  2200.  > BPTR CurrentDir(BPTR);
  2201.  
  2202.  
  2203. ******* dos.library/Cli ************
  2204. *
  2205. *   NAME
  2206. *    Cli -- Returns a pointer to the CLI structure of the current process.
  2207. *
  2208. *   SYNOPSIS
  2209. *    cli_ptr = Cli()
  2210. *    D0
  2211. *
  2212. *    struct CommandLineInterface *Cli(void)
  2213. *
  2214. *   FUNCTION
  2215. *    Returns a pointer to the CLI structure of the current process, or NULL
  2216. *    if the process has no CLI structure.
  2217. *
  2218. *   RESULT
  2219. *    cli_ptr - pointer to the CLI structure.
  2220. *
  2221.  
  2222.  
  2223. ******* dos.library/CreateNewProc ************
  2224. *
  2225. *   NAME
  2226. *    CreateNewProc -- Create a new process
  2227. *
  2228. *   SYNOPSIS
  2229. *    process = CreateNewProc(tags)
  2230. *    D0                       D1
  2231. *
  2232. *    struct Process *CreateNewProc(struct TagItem *)
  2233. *
  2234. *   FUNCTION
  2235. *    This creates a new process according to the specification of the newproc
  2236. *    structure.  See libraries/dostags.h for the NewProcess tags.
  2237. *
  2238. *   INPUTS
  2239. *    tags - a pointer to a TagItem array.
  2240. *
  2241. *   RESULT
  2242. *    process - The created process.
  2243. *
  2244.  
  2245.  
  2246. ******* dos.library/RunCommand ************
  2247. *
  2248. *   NAME
  2249. *    RunCommand -- Runs a program using the current process
  2250. *
  2251. *   SYNOPSIS
  2252. *    rc = RunCommand(seglist, stacksize, argptr, argsize)
  2253. *    D0                D1         D2       D3      D4
  2254. *
  2255. *    LONG RunCommand(BPTR, ULONG, char *, ULONG)
  2256. *
  2257. *   FUNCTION
  2258. *    Runs a command on your process/cli.  Seglist may be any language,
  2259. *    including BCPL programs.  Stacksize is in longs.  argptr is a null-
  2260. *    terminated string, argsize is its length.  Returns returncode the
  2261. *    program exited with. Returns -1 if stack couldn't be allocated.
  2262. *
  2263. *   INPUTS
  2264. *    seglist   - Seglist of command to run.
  2265. *    stacksize - Number of bytes to allocate for stack space
  2266. *    argptr    - Pointer to argument command string.
  2267. *    argsize   - Number of bytes in argument command.
  2268. *
  2269. *   RESULT
  2270. *    rc        - Return code from executed command. -1 indicates failure 
  2271. *
  2272.  
  2273.  
  2274. ******* dos.library/GetConsoleTask ************
  2275. *
  2276. *   NAME
  2277. *    GetConsoleTask -- Returns the default console for the process
  2278. *
  2279. *   SYNOPSIS
  2280. *    port = GetConsoleTask()
  2281. *    D0
  2282. *
  2283. *    struct MsgPort *GetConsoleTask(void)
  2284. *
  2285. *   FUNCTION
  2286. *    Returns the default console task's port (pr_ConsoleTask) for the
  2287. *    current process.
  2288. *
  2289. *   RESULT
  2290. *    port - The pr_MsgPort of the console handler, or NULL.
  2291. *
  2292.  
  2293.  
  2294. ******* dos.library/SetConsoleTask ************
  2295. *
  2296. *   NAME
  2297. *    SetConsoleTask -- Sets the default console for the process
  2298. *
  2299. *   SYNOPSIS
  2300. *    SetConsoleTask(port)
  2301. *            D1
  2302. *
  2303. *    void SetConsoleTask(struct MsgPort *)
  2304. *
  2305. *   FUNCTION
  2306. *    Sets the default console task's port (pr_ConsoleTask) for the
  2307. *    current process.
  2308. *
  2309. *   INPUTS
  2310. *    port - The pr_MsgPort of the console handler.
  2311. *
  2312.  
  2313.  
  2314. ******* dos.library/GetFileSysTask ************
  2315. *
  2316. *   NAME
  2317. *    GetFileSysTask -- Returns the default filesystem for the process
  2318. *
  2319. *   SYNOPSIS
  2320. *    port = GetFileSysTask()
  2321. *    D0
  2322. *
  2323. *    struct MsgPort *GetFileSysTask(void)
  2324. *
  2325. *   FUNCTION
  2326. *    Returns the default filesystem task's port (pr_FileSystemTask) for the
  2327. *    current process.
  2328. *
  2329. *   RESULT
  2330. *    port - The pr_MsgPort of the filesystem, or NULL.
  2331. *
  2332.  
  2333.  
  2334. ******* dos.library/SetFileSysTask ************
  2335. *
  2336. *   NAME
  2337. *    SetFileSysTask -- Sets the default filesystem for the process
  2338. *
  2339. *   SYNOPSIS
  2340. *    SetFileSysTask(port)
  2341. *            D1
  2342. *
  2343. *    void SetFileSysTask(struct MsgPort *)
  2344. *
  2345. *   FUNCTION
  2346. *    Sets the default filesystem task's port (pr_FileSystemTask) for the
  2347. *    current process.
  2348. *
  2349. *   INPUTS
  2350. *    port - The pr_MsgPort of the filesystem
  2351. *
  2352.  
  2353.  
  2354. ******* dos.library/GetArgStr ************
  2355. *
  2356. *   NAME
  2357. *    GetArgStr -- Returns the arguments for the program (process)
  2358. *
  2359. *   SYNOPSIS
  2360. *    ptr = GetArgStr()
  2361. *    D0
  2362. *
  2363. *    UBYTE *GetArgStr(void)
  2364. *
  2365. *   FUNCTION
  2366. *    Returns a pointer to the (null-terminated) arguments for the program
  2367. *    (process).  This is the same string passed in a0 on startup from CLI.
  2368. *
  2369. *   RESULT
  2370. *    ptr - pointer to arguments
  2371. *
  2372.  
  2373.  
  2374. ******* dos.library/SetArgStr ************
  2375. *
  2376. *   NAME
  2377. *    SetArgStr -- Sets the arguments for the current program (process)
  2378. *
  2379. *   SYNOPSIS
  2380. *    SetArgStr(ptr)
  2381. *          D1
  2382. *
  2383. *    void SetArgStr(UBYTE *)
  2384. *
  2385. *   FUNCTION
  2386. *    Sets the arguments for the current program.  The ptr MUST be reset
  2387. *    to it's original value before process exit.
  2388. *
  2389. *   INPUTS
  2390. *    ptr - pointer to new argument string.
  2391. *
  2392.  
  2393.  
  2394. ******* dos.library/FindCliProc ************
  2395. *
  2396. *   NAME
  2397. *    FindCliProc -- returns a pointer to the requested CLI process
  2398. *
  2399. *   SYNOPSIS
  2400. *    proc = FindCliProc(num)
  2401. *    D0             D1
  2402. *
  2403. *    struct Process *FindCliProc(LONG)
  2404. *
  2405. *   FUNCTION
  2406. *    This routine returns a pointer to the CLI process associated with the 
  2407. *    given CLI number.  If no task is active, NULL is returned.  NOTE: should
  2408. *    normally be called inside a Forbid(), if you must use this function at
  2409. *    all.  (Note: I don't like the forbid bit, maybe a semaphore is a good
  2410. *    idea, or some other way to get the information needed - probably will
  2411. *    change).
  2412. *
  2413. *   INPUTS
  2414. *    num  - CLI process of interest.
  2415. *
  2416. *   RESULT
  2417. *    proc - Pointer to given CLI process
  2418. *
  2419.  
  2420.  
  2421. ******* dos.library/MaxCli ************
  2422. *
  2423. *   NAME
  2424. *    MaxCli -- returns the highest CLI process number possibly in use.
  2425. *
  2426. *   SYNOPSIS
  2427. *    number = MaxCli()
  2428. *    D0
  2429. *
  2430. *    LONG MaxCli(void)
  2431. *
  2432. *   FUNCTION
  2433. *    Returns the highest CLI number that may be in use.  CLI numbers are
  2434. *    reused, and are usually as small as possible.  To find all CLIs, scan
  2435. *    using FindCLI from 1 to MaxCLI().  The number returned by MaxCli may
  2436. *    change as processes are created and destroyed.
  2437. *
  2438. *   RESULT
  2439. *    number - The highest CLI number that may be in use.
  2440. *
  2441.  
  2442.  
  2443. ******* dos.library/SetCurrentDirName ************
  2444. *
  2445. *   NAME
  2446. *    SetCurrentDirName -- Sets the current directory name for the process
  2447. *
  2448. *   SYNOPSIS
  2449. *    success = SetCurrentDirName(name)
  2450. *    D0                        D1
  2451. *
  2452. *    BOOL SetCurrentDirName(char *)
  2453. *
  2454. *   FUNCTION
  2455. *    Sets the name for the current dir in the cli structure.  If the name is 
  2456. *    too long to fit, a failure is returned, and the old value is left
  2457. *    intact.  It is advised that you inform the user of this condition.
  2458. *    This routine is safe to call even if there is no CLI structure.
  2459. *
  2460. *   INPUTS
  2461. *    name    - Name of directory to be set.
  2462. *
  2463. *   RESULT
  2464. *    success - Success/failure indicator
  2465. *
  2466.  
  2467.  
  2468. ******* dos.library/GetCurrentDirName ************
  2469. *
  2470. *   NAME
  2471. *    GetCurrentDirName -- returns the current directory name
  2472. *
  2473. *   SYNOPSIS
  2474. *    success = GetCurrentDirName(buf, len)
  2475. *    D0                        D1   D2
  2476. *
  2477. *    BOOL GetCurrentDirName(char *, LONG)
  2478. *
  2479. *   FUNCTION
  2480. *    Extracts the current directory name from the CLI structure and puts it 
  2481. *    into the buffer.  If the buffer is too small, the name is truncated 
  2482. *    appropriately and a failure code returned.  If no CLI structure is 
  2483. *    present, a null name is returned.
  2484. *
  2485. *   INPUTS
  2486. *    buf     - Buffer to hold extracted name
  2487. *    len     - Number of bytes of space in buffer
  2488. *
  2489. *   RESULT
  2490. *    success - Success/failure indicator
  2491. *
  2492.  
  2493.  
  2494. ******* dos.library/SetProgramName ************
  2495. *
  2496. *   NAME
  2497. *    SetProgramName -- Sets the name of the program being run
  2498. *
  2499. *   SYNOPSIS
  2500. *    success = SetProgramName(name)
  2501. *    D0                        D1
  2502. *
  2503. *    BOOL SetProgramName(char *)
  2504. *
  2505. *   FUNCTION
  2506. *    Sets the name for the program in the cli structure.  If the name is 
  2507. *    too long to fit, a failure is returned, and the old value is left
  2508. *    intact.  It is advised that you inform the user if possible of this
  2509. *    condition, and/or set the program name to an empty string.
  2510. *    This routine is safe to call even if there is no CLI structure.
  2511. *
  2512. *   INPUTS
  2513. *    name    - Name of program to use.
  2514. *
  2515. *   RESULT
  2516. *    success - Success/failure indicator.
  2517. *
  2518.  
  2519.  
  2520. ******* dos.library/GetProgramName ************
  2521. *
  2522. *   NAME
  2523. *    GetProgramName -- Returns the current program name
  2524. *
  2525. *   SYNOPSIS
  2526. *    success = GetProgramName(buf, len)
  2527. *    D0                       D1   D2
  2528. *
  2529. *    BOOL GetProgramName(char *, LONG)
  2530. *
  2531. *   FUNCTION
  2532. *    Extracts the program name from the CLI structure and puts it 
  2533. *    into the buffer.  If the buffer is too small, the name is truncated 
  2534. *    appropriately and a failure code returned.  If no CLI structure is 
  2535. *    present, a null name is returned.
  2536. *
  2537. *   INPUTS
  2538. *    buf     - Buffer to hold extracted name
  2539. *    len     - Number of bytes of space in buffer
  2540. *
  2541. *   RESULT
  2542. *    success - Success/failure indicator
  2543. *
  2544.  
  2545.  
  2546. ******* dos.library/SetPrompt ************
  2547. *
  2548. *   NAME
  2549. *    SetPrompt -- Sets the CLI/shell prompt for the current process
  2550. *
  2551. *   SYNOPSIS
  2552. *    success = SetPrompt(name)
  2553. *    D0                D1
  2554. *
  2555. *    BOOL SetPrompt(char *)
  2556. *
  2557. *   FUNCTION
  2558. *    Sets the text for the prompt in the cli structure.  If the prompt is 
  2559. *    too long to fit, a failure is returned, and the old value is left
  2560. *    intact.  It is advised that you inform the user of this condition.
  2561. *    This routine is safe to call even if there is no CLI structure.
  2562. *
  2563. *   INPUTS
  2564. *    name    - Name of prompt to be set.
  2565. *
  2566. *   RESULT
  2567. *    success - Success/failure indicator.
  2568. *
  2569.  
  2570.  
  2571. ******* dos.library/GetPrompt ************
  2572. *
  2573. *   NAME
  2574. *    GetPrompt -- Returns the prompt for the current process
  2575. *
  2576. *   SYNOPSIS
  2577. *    success = GetPrompt(buf, len)
  2578. *    D0                  D1   D2
  2579. *
  2580. *    BOOL GetPrompt(char *, LONG)
  2581. *
  2582. *   FUNCTION
  2583. *    Extracts the prompt string from the CLI structure and puts it 
  2584. *    into the buffer.  If the buffer is too small, the string is truncated 
  2585. *    appropriately and a failure code returned.  If no CLI structure is 
  2586. *    present, a null string is returned.
  2587. *
  2588. *   INPUTS
  2589. *    buf     - Buffer to hold extracted prompt
  2590. *    len     - Number of bytes of space in buffer
  2591. *
  2592. *   RESULT
  2593. *    success - Success/failure indicator
  2594. *
  2595.  
  2596.  
  2597. ******* dos.library/GetProgramDir ************
  2598. *
  2599. *   NAME
  2600. *    GetProgramDir -- Returns a lock on the directory the program was loaded
  2601. *             from.
  2602. *
  2603. *   SYNOPSIS
  2604. *    lock = GetProgramDir()
  2605. *    D0
  2606. *
  2607. *    BPTR GetProgramDir(void)
  2608. *
  2609. *   FUNCTION
  2610. *    Returns a shared lock on the directory the program was loaded from.
  2611. *    This can be used for a program to find data files, etc, that are stored
  2612. *    with the program, or to find the program file itself.  NULL returns are
  2613. *    valid, and may occur, for example, when running a program from the
  2614. *    resident list.  You should NOT unlock the lock.
  2615. *
  2616. *   RESULT
  2617. *    lock - A lock on the directory the current program was loaded from,
  2618. *           or NULL if loaded from resident list, etc.
  2619. *
  2620. *   BUGS
  2621. *    Should return a lock for things loaded via resident
  2622. *
  2623.  
  2624.  
  2625. ******* dos.library/SetProgramDir ************
  2626. *
  2627. *   NAME
  2628. *    SetProgramDir -- Sets the directory returned by GetProgramDir
  2629. *
  2630. *   SYNOPSIS
  2631. *    SetProgramDir(lock)
  2632. *               D1
  2633. *
  2634. *    void SetProgramDir(BPTR)
  2635. *
  2636. *   FUNCTION
  2637. *    Sets a shared lock on the directory the program was loaded from.
  2638. *    This can be used for a program to find data files, etc, that are stored
  2639. *    with the program, or to find the program file itself.  NULL is a
  2640. *    valid input.
  2641. *
  2642. *   INPUTS
  2643. *    lock - A lock on the directory the current program was loaded from
  2644. *
  2645.  
  2646.  
  2647. ******* dos.library/System ************
  2648. *
  2649. *   NAME
  2650. *    System -- Have the default CLI execute a command line
  2651. *
  2652. *   SYNOPSIS
  2653. *    error = System(command, tags)
  2654. *    D0         D1      D2 
  2655. *
  2656. *    LONG System(UBYTE *, struct TagItem *)
  2657. *
  2658. *   FUNCTION
  2659. *    Similar to Execute, but does not read commands from the input
  2660. *    filehandle.  Spawns a CLI process to execute the command, and returns
  2661. *    the returncode the command produced, or -1 if the command could not be
  2662. *    run for any reason.  The input and output filehandles will not be
  2663. *    closed by System, you must close them (if needed) after System returns.
  2664. *    To make it inherit your input or output, use Input() or Output() for
  2665. *    the filehandle.  Normal CLI command-line parsing will be done,
  2666. *    including redirection.  The current directory and path will be
  2667. *    inherited from your process.  Your path will be used to find the
  2668. *    command.
  2669. *
  2670. *   INPUTS
  2671. *    command - Program and arguments
  2672. *    tags    - see dos/dostags.h.  Currently allows specifying input and
  2673. *          output filehandles.
  2674. *
  2675. *   RESULT
  2676. *    error    - 0 for success, error from command, or -1.
  2677. *
  2678.  
  2679.  
  2680.  
  2681. ======================
  2682. Device List Management
  2683. ======================
  2684.  > struct MsgPort *DeviceProc(char *);
  2685.    Bumps an open count (see CloseDeviceProc()).
  2686.  
  2687.  
  2688. ******* dos.library/AssignLock ************
  2689. *
  2690. *   NAME
  2691. *    AssignLock -- Creates an assignment to a locked object
  2692. *
  2693. *   SYNOPSIS
  2694. *    rc = AssignLock(name,lock)
  2695. *    D0               D1   D2
  2696. *
  2697. *    BOOL AssignLock(char *,BPTR)
  2698. *
  2699. *   FUNCTION
  2700. *    Sets up an assign of a name to a given lock.  Passing NULL for a lock 
  2701. *    cancels any outstanding assign to that name.  If an assign entry of
  2702. *    that name is already on the list, this routine replaces that entry.  If
  2703. *    an entry is on the list that conflicts with the new assign, then a
  2704. *    failure code is returned.
  2705. *
  2706. *   INPUTS
  2707. *    name - Name of device to assign lock to (without trailing ':')
  2708. *    lock - Lock associated with the assigned name
  2709. *
  2710. *   RESULT
  2711. *    rc   - Success/failure indicator
  2712. *
  2713.  
  2714.  
  2715. ******* dos.library/AssignPath ************
  2716. *
  2717. *   NAME
  2718. *    AssignPath -- Creates an assignment to a specified path
  2719. *
  2720. *   SYNOPSIS
  2721. *    rc = AssignPath(name,path)
  2722. *    D0               D1   D2
  2723. *
  2724. *    BOOL AssignPath(char *,char *)
  2725. *
  2726. *   FUNCTION
  2727. *    Sets up a assignment that is expanded upon EACH reference to the name.
  2728. *    This is implemented through a new device list type (DLT_ASSIGNPATH, or
  2729. *    some such).  The path (a string) would be attached to the node.  When
  2730. *    the name is referenced (Open("FOO:xyzzy"...), the string will be used
  2731. *    to determine where to do the open.  No permanent lock will be part of
  2732. *    it.  For example, you could AssignPath c2: to df2:c, and references to
  2733. *    c2: would go to df2:c, even if you change disks.
  2734. *
  2735. *    The other major advantage is assigning things to unmounted volumes,
  2736. *    which will be requested upon access (useful in startup sequences).
  2737. *
  2738. *   INPUTS
  2739. *    name - Name of device to be assigned (without trailing ':')
  2740. *    path - Name of late assignment to be resolved at each reference
  2741. *
  2742. *   RESULT
  2743. *    rc   - Success/failure indicator of the operation
  2744. *
  2745.  
  2746.  
  2747. ******* dos.library/GetDeviceProc ************
  2748. *
  2749. *   NAME
  2750. *    GetDeviceProc -- Finds a handler to send a message to
  2751. *
  2752. *   SYNOPSIS
  2753. *    devproc = GetDeviceProc(name, devproc)
  2754. *      D0             D1     D2
  2755. *
  2756. *    struct DevProc *GetDeviceProc(UBYTE *, struct DevProc *)
  2757. *
  2758. *   FUNCTION
  2759. *    Finds the handler/filesystem to send packets regarding 'name' to.
  2760. *    This may involve getting temporary locks.  It returns a structure
  2761. *    that includes a lock and msgport to send to to attempt your operation.
  2762. *    It also includes information on how to handle multiple-directory
  2763. *    assigns (by passing the DevProc back to GetDeviceProc until it returns
  2764. *    NULL).
  2765. *
  2766. *    The initial call to GetDeviceProc should pass NULL for devproc.  If
  2767. *    after using the returned DevProc, you get an ERROR_OBJECT_NOT_FOUND,
  2768. *    and (devproc->dvp_Flags & DVPF_ASSIGN) is true, you should call
  2769. *    GetDeviceProc again, passing it the devproc structure.  It will either
  2770. *    return a modified devproc structure, or NULL (with ERROR_NO_MORE_ENTRIES
  2771. *    in IoErr()).
  2772. *
  2773. *    Increments the counter that locks a handler/fs into memory.  After
  2774. *    calling FreeDeviceProc, do not use the port or lock again!
  2775. *
  2776. *   INPUTS
  2777. *    name    - name of the object you wish to access
  2778. *    devproc - A value returned by GetDeviceProc before, or NULL
  2779. *
  2780. *   RESULT
  2781. *    devproc - a pointer to a DevProc structure or NULL
  2782. *
  2783.  
  2784.  
  2785. ******* dos.library/FreeDeviceProc ************
  2786. *
  2787. *   NAME
  2788. *    FreeDeviceProc -- Releases hold on port returned by GetDeviceProc
  2789. *
  2790. *   SYNOPSIS
  2791. *    FreeDeviceProc(devproc)
  2792. *             D1
  2793. *
  2794. *    void FreeDeviceProc(struct DevProc *)
  2795. *
  2796. *   FUNCTION
  2797. *    Frees up the structure created by GetDeviceProc, and any associated
  2798. *    temporary locks.
  2799. *    Decrements the counter incremented by GetDeviceProc.  The counter is in
  2800. *    an extension to the 1.3 process structure.  After calling
  2801. *    FreeDeviceProc, do not use the port or lock again!  It is safe to call
  2802. *    FreeDeviceProc(NULL).
  2803. *
  2804. *   INPUTS
  2805. *    devproc - A value returned by GetDeviceProc
  2806. *
  2807.  
  2808.  
  2809. ******* dos.library/LockDosList ************
  2810. *
  2811. *   NAME
  2812. *    LockDosList -- Locks the Dos Lists for use
  2813. *
  2814. *   SYNOPSIS
  2815. *    dlist = LockDosList(flags)
  2816. *    D0             D1
  2817. *
  2818. *    struct DosList *LockDosList(ULONG)
  2819. *
  2820. *   FUNCTION
  2821. *    Locks the dos device list in preparation to walk the list.
  2822. *    If the list is 'busy' then this routine will not return until it is 
  2823. *    available.  This routine "nests": you can call it multiple times, and
  2824. *    then must unlock it the same number of times.  The dlist
  2825. *    returned is NOT a valid entry: it is a special value.  Note that
  2826. *    for 1.3 compatibility, it also does a Forbid() - this will probably
  2827. *    be removed at some future time.  The 1.3 Forbid() locking of this
  2828. *    list had some race conditions.
  2829. *    
  2830. *
  2831. *   INPUTS
  2832. *    flags - Flags stating which types of nodes you want to lock.
  2833. *
  2834. *   RESULT
  2835. *    dlist - Pointer to the head of the list.  NOT a valid node.
  2836. *
  2837.  
  2838.  
  2839. ******* dos.library/UnLockDosList ************
  2840. *
  2841. *   NAME
  2842. *    UnLockDosList -- Unlocks the Dos List
  2843. *
  2844. *   SYNOPSIS
  2845. *    UnLockDosList(flags)
  2846. *            D1
  2847. *
  2848. *    void UnLockDosList(ULONG)
  2849. *
  2850. *   FUNCTION
  2851. *    Unlocks the access on the Dos Device List.
  2852. *
  2853. *   INPUTS
  2854. *    flags - MUST be the same flags passed to (Attempt)LockDosList
  2855. *
  2856.  
  2857.  
  2858. ******* dos.library/AttemptLockDosList ************
  2859. *
  2860. *   NAME
  2861. *    AttemptLockDosList -- Attempt to lock the Dos Lists for use
  2862. *
  2863. *   SYNOPSIS
  2864. *    dlist = AttemptLockDosList(flags)
  2865. *    D0                D1
  2866. *
  2867. *    struct DosList *AttemptLockDosList(ULONG)
  2868. *
  2869. *   FUNCTION
  2870. *    Locks the dos device list in preparation to walk the list.
  2871. *    If the list is 'busy' then this routine will return NULL.
  2872. *
  2873. *   INPUTS
  2874. *    flags - Flags stating which types of nodes you want to lock.
  2875. *
  2876. *   RESULT
  2877. *    dlist - Pointer to the beginning of the list or NULL.
  2878. *
  2879.  
  2880.  
  2881. ******* dos.library/RemDosEntry ************
  2882. *
  2883. *   NAME
  2884. *    RemDosEntry -- Removes a Dos List entry from it's list
  2885. *
  2886. *   SYNOPSIS
  2887. *    success = RemDosEntry(dlist)
  2888. *    D0                     D1
  2889. *
  2890. *    BOOL RemDosEntry(struct DosList *)
  2891. *
  2892. *   FUNCTION
  2893. *    This removes an entry from the Dos Device list.  The memory associated
  2894. *    with the entry is NOT freed.  NOTE: you must have locked the Dos List
  2895. *    with the appropriate flags before calling this routine.
  2896. *
  2897. *   INPUTS
  2898. *    dlist   - Device list entry to be removed.
  2899. *
  2900. *   RESULT
  2901. *    success - Success/failure indicator
  2902. *
  2903.  
  2904.  
  2905. ******* dos.library/AddDosEntry ************
  2906. *
  2907. *   NAME
  2908. *    AddDosEntry -- Add a Dos List entry to the lists
  2909. *
  2910. *   SYNOPSIS
  2911. *    success = AddDosEntry(dlist)
  2912. *    D0                     D1
  2913. *
  2914. *    BOOL AddDosEntry(struct DosList *)
  2915. *
  2916. *   FUNCTION
  2917. *    Adds a device, volume or assign to the dos devicelist.  Can fail if it 
  2918. *    conflicts with an existing entry (such as another assign to the same
  2919. *    name or another device of the same name).  Volume nodes with different
  2920. *    dates and the same name CAN be added, or with names that conflict with
  2921. *    devices or assigns.  Note: the dos list does NOT have to be locked to
  2922. *    call this.  Do not access dlist after adding unless you have locked the
  2923. *    Dos Device list.
  2924. *
  2925. *   INPUTS
  2926. *    dlist   - Device list entry to be added.
  2927. *
  2928. *   RESULT
  2929. *    success - Success/Failure indicator
  2930. *
  2931.  
  2932.  
  2933. ******* dos.library/FindDosEntry ************
  2934. *
  2935. *   NAME
  2936. *    FindDosEntry -- Finds a specific Dos List entry
  2937. *
  2938. *   SYNOPSIS
  2939. *    newdlist = FindDosEntry(dlist,name,flags)
  2940. *    D0                       D1    D2   D3
  2941. *
  2942. *    struct DosList *FindDosEntry(struct DosList *,UBYTE *,ULONG)
  2943. *
  2944. *   FUNCTION
  2945. *    Locates an entry on the device list.  Starts with the entry dlist.
  2946. *    NOTE: must be called with the device list locked, no references may be
  2947. *    made to dlist after unlocking.  See also RemDosList, LockDosList.
  2948. *
  2949. *   INPUTS
  2950. *    dlist    - The device entry to start with.
  2951. *    name     - Name of device entry (without ':') to locate.
  2952. *    flags    - Search control flags.  Use the flags you passed to
  2953. *           LockDosList, or a subset of them.  LDF_READ/LDF_WRITE are
  2954. *           not required for this call.
  2955. *
  2956. *   RESULT
  2957. *    newdlist - The device entry or NULL
  2958. *
  2959.  
  2960.  
  2961. ******* dos.library/NextDosEntry ************
  2962. *
  2963. *   NAME
  2964. *    NextDosEntry -- Get the next Dos List entry
  2965. *
  2966. *   SYNOPSIS
  2967. *    newdlist = NextDosEntry(dlist,flags)
  2968. *    D0                       D1    D2
  2969. *
  2970. *    struct DosList *NextDosEntry(struct DosList *,ULONG)
  2971. *
  2972. *   FUNCTION
  2973. *    Find the next Dos List entry of the right type.  You MUST have locked
  2974. *    the types you're looking for.  Returns NULL if there are no more of
  2975. *    that type in the list.
  2976. *
  2977. *   INPUTS
  2978. *    dlist    - The current device entry.
  2979. *    flags     - What type of entries to look for. (see FindDosEntry)
  2980. *
  2981. *   RESULT
  2982. *    newdlist - The next device entry of the right type or NULL.
  2983. *
  2984.  
  2985.  
  2986. ******* dos.library/MakeDosEntry ************
  2987. *
  2988. *   NAME
  2989. *    MakeDosEntry -- Creates a DosList structure.
  2990. *
  2991. *   SYNOPSIS
  2992. *    newdlist = MakeDosEntry(name, type)
  2993. *    D0                       D1    D2
  2994. *
  2995. *    struct DosList *MakeDosEntry(UBYTE *, LONG)
  2996. *
  2997. *   FUNCTION
  2998. *    Create a DosList structure, including allocating a name and correctly
  2999. *    null-terminating the BSTR.  It also sets the dol_Type field, and sets
  3000. *    all other fields to 0.  This routine should be
  3001. *    eliminated and replaced by a value passed to AllocDosObject!
  3002. *
  3003. *   INPUTS
  3004. *    name - name for the device/volume/assign node.
  3005. *    type - type of node.
  3006. *
  3007. *   RESULT
  3008. *    newdlist - The new device entry or NULL.
  3009. *
  3010.  
  3011.  
  3012. ******* dos.library/FreeDosEntry ************
  3013. *
  3014. *   NAME
  3015. *    FreeDosEntry -- Frees an entry created by MakeDosEntry
  3016. *
  3017. *   SYNOPSIS
  3018. *    FreeDosEntry(dlist)
  3019. *                   D1
  3020. *
  3021. *    void FreeDosEntry(struct DosList *)
  3022. *
  3023. *   FUNCTION
  3024. *    Frees an entry created by MakeDosEntry.  This routine should be
  3025. *    eliminated and replaced by a value passed to FreeDosObject!
  3026. *
  3027. *   INPUTS
  3028. *    dlist - DosList to free.
  3029. *
  3030. *
  3031.  
  3032.  
  3033. ******* dos.library/IsFileSystem ************
  3034. *
  3035. *   NAME
  3036. *    IsFileSystem -- returns whether a Dos handler is a filesystem or not.
  3037. *
  3038. *   SYNOPSIS
  3039. *    result = IsFileSystem(name)
  3040. *    D0                     D1
  3041. *
  3042. *    BOOL IsFileSystem(char *)
  3043. *
  3044. *   FUNCTION
  3045. *    Returns whether the device is a filesystem or not.  A filesystem
  3046. *    supports seperate files storing information.  It may also support
  3047. *    sub-directories, but is not required to.
  3048. *
  3049. *   INPUTS
  3050. *    name   - Name of device in question, with trailing ':'.
  3051. *
  3052. *   RESULT
  3053. *    result - Flag to indicate if device is a file system
  3054. *
  3055.  
  3056.  
  3057.  
  3058. =================
  3059. Handler Interface
  3060. =================
  3061.  
  3062. ******* dos.library/Format ************
  3063. *
  3064. *   NAME
  3065. *    Format -- Causes a filesystem to initialize itself
  3066. *
  3067. *   SYNOPSIS
  3068. *    rc = Format(filesystem)
  3069. *    D0              D1
  3070. *
  3071. *    BOOL Format(char *)
  3072. *
  3073. *   FUNCTION
  3074. *    Interface for initializing new media on a device.  For any sufficiently
  3075. *    large or even non-removable media this routine should provide an
  3076. *    interface to permit the user to back out of the action.  This routine
  3077. *    will require some enhancement to the handler packet level interface in
  3078. *    order to implement.
  3079. *
  3080. *   INPUTS
  3081. *    device - Name of device to be formatted.  ':' must be supplied.
  3082. *
  3083. *   RESULT
  3084. *    rc     - Success/failure indicator.
  3085. *
  3086. *   BUGS
  3087. *    not implemented yet
  3088. *
  3089.  
  3090.  
  3091. ******* dos.library/Relabel ************
  3092. *
  3093. *   NAME
  3094. *    Relabel -- Change the volume name of a volume
  3095. *
  3096. *   SYNOPSIS
  3097. *    success = Relabel(volumename,name)
  3098. *    D0                    D1      D2
  3099. *
  3100. *    BOOL Relabel(char *,char *)
  3101. *
  3102. *   FUNCTION
  3103. *    Sends an ACTION_RENAME_DISK to the handler for the volume.  Any
  3104. *    secondary result codes are returned through IOErr().
  3105. *
  3106. *   INPUTS
  3107. *    volumename - Full name of device to rename (with ':')
  3108. *    newname    - New name to apply to device
  3109. *
  3110. *   RESULT
  3111. *    success    - Success/failure indicator
  3112. *
  3113.  
  3114.  
  3115. ******* dos.library/Inhibit ************
  3116. *
  3117. *   NAME
  3118. *    Inhibit -- Inhibits access to a filesystem
  3119. *
  3120. *   SYNOPSIS
  3121. *    success = Inhibit(filesystem, flag)
  3122. *    D0                    D1       D2
  3123. *
  3124. *    BOOL Inhibit(char *,LONG)
  3125. *
  3126. *   FUNCTION
  3127. *    Sends an ACTION_INHIBIT packet to the indicated handler.  This stops all
  3128. *    activity by the handler until uninhibited.  When uninhibited, anything*
  3129. *    may have happened to the disk in the drive, or there may no longer be
  3130. *    one.
  3131. *
  3132. *   INPUTS
  3133. *    filesystem - Name of device to inhibit (with ':')
  3134. *    flag       - New status.  DOSTRUE = inhibited, FALSE = uninhibited
  3135. *
  3136. *   RESULT
  3137. *    success    - Success/failure indicator
  3138. *
  3139.  
  3140.  
  3141. ******* dos.library/AddBuffers ************
  3142. *
  3143. *   NAME
  3144. *    AddBuffers -- Changes the number of buffers for a filesystem
  3145. *
  3146. *   SYNOPSIS
  3147. *    success = AddBuffers(filesystem, number)
  3148. *    D0               D1          D2
  3149. *
  3150. *    BOOL AddBuffers(char *, LONG)
  3151. *
  3152. *   FUNCTION
  3153. *    Adds buffers to a filesystem.  If it succeeds, the number of current
  3154. *    buffers is returned in IoErr().  Note that "number" may be negative.
  3155. *    The amount of memory used per buffer, and any limits on the number of
  3156. *    buffers, are dependant on the filesystem in question.
  3157. *    If the call succeeds, the number of buffers in use on the filesystem
  3158. *    will be returned by IoErr().
  3159. *
  3160. *   INPUTS
  3161. *    filesystem - Name of device to add buffers to (with ':').
  3162. *    number     - Number of buffers to add.  May be negative.
  3163. *
  3164. *   RESULT
  3165. *    success    - Success or failure of command.
  3166. *
  3167.  
  3168.  
  3169.  
  3170. ==================
  3171. Date Time Routines
  3172. ==================
  3173.  > void Delay(long);
  3174.  > long * DateStamp(long *);
  3175.  
  3176.  
  3177. ******* dos.library/CompareDates ************
  3178. *
  3179. *   NAME
  3180. *    CompareDates -- Compares two datestamps
  3181. *
  3182. *   SYNOPSIS
  3183. *    result = CompareDates(date1,date2)
  3184. *    D0                     D1     D2
  3185. *
  3186. *    LONG CompareDates(struct DateStamp *,struct DateStamp *)
  3187. *
  3188. *   FUNCTION
  3189. *    Compares two times for relative magnitide.  <0 is returned if date1 is
  3190. *    later than date2, 0 if they are equal, or >0 if date2 is later than
  3191. *    date1.
  3192. *
  3193. *   INPUTS
  3194. *    date1, date2 - DateStamps to compare
  3195. *
  3196. *   RESULT
  3197. *    result       -  <0, 0, or >0 based on comparison of two date stamps
  3198. *
  3199.  
  3200.  
  3201. ******* dos.library/DateToStr ************
  3202. *
  3203. *   NAME
  3204. *    DateToStr -- Converts a DateStamp to a string
  3205. *
  3206. *   SYNOPSIS
  3207. *    error = DateToStr( datetime )
  3208. *    D0                   D1
  3209. *
  3210. *    BOOL DateToStr(struct DateTime *)
  3211. *
  3212. *   FUNCTION
  3213. *    StamptoStr converts an AmigaDOS DateStamp to a human
  3214. *    readable ASCII string as requested by your settings in the
  3215. *    DateTime structure.
  3216. *
  3217. *   INPUTS
  3218. *    DateTime - a pointer to an initialized DateTime structure.
  3219. *
  3220. *    The DateTime structure should be initialized as follows:
  3221. *
  3222. *    dat_Stamp - a copy of the datestamp you wish to convert to
  3223. *          ascii.
  3224. *
  3225. *    dat_Format - a format    byte which specifies the format    of the
  3226. *          dat_StrDate.    This can be any    of the following
  3227. *          (note: If value used is something other than those
  3228. *          below, the default of    FORMAT_DOS is used):
  3229. *
  3230. *          FORMAT_DOS:      AmigaDOS format (dd-mmm-yy).
  3231. *
  3232. *          FORMAT_INT:      International    format (yy-mmm-dd).
  3233. *
  3234. *          FORMAT_USA:      American format (mm-dd-yy).
  3235. *
  3236. *          FORMAT_CDN:      Canadian format (dd-mm-yy).
  3237. *
  3238. *    dat_Flags - a    flags byte.  The only flag which affects this
  3239. *          function is:
  3240. *
  3241. *          DTB_SUBST:      If set, a string such    as Today,
  3242. *                  Monday, etc.,    will be    used instead
  3243. *                  of the dat_Format specification if
  3244. *                  possible.
  3245. *          DTB_FUTURE:      Ignored by this function.
  3246. *
  3247. *    dat_StrDay - pointer to a buffer to receive the day of the
  3248. *          week string.    (Monday, Tuesday, etc.). If null, this
  3249. *          string will not be generated.
  3250. *
  3251. *    dat_StrDate -    pointer    to a buffer to receive the date
  3252. *          string, in the format    requested by dat_Format,
  3253. *          subject to possible modifications by DTB_SUBST.  If
  3254. *          null,    this string will not be    generated.
  3255. *
  3256. *    dat_StrTime -    pointer    to a buffer to receive the time    of day
  3257. *          string. If NULL, this    will not be generated.
  3258. *
  3259. *   RESULT
  3260. *    error    - a non-zero return indicates that the DateStamp was
  3261. *          invalid, and could not be converted.    Zero indicates
  3262. *          that everything went according to plan.
  3263. *
  3264. *   SEE ALSO
  3265. *    StrtoDate(), libraries/datetime.h
  3266. *
  3267.  
  3268.  
  3269. ******* dos.library/StrToDate ************
  3270. *
  3271. *   NAME
  3272. *    StrToDate -- Converts a string to a DateStamp
  3273. *
  3274. *   SYNOPSIS
  3275. *    error = StrToDate( datetime )
  3276. *    D0                    D1
  3277. *
  3278. *    BOOL StrToDate( struct DateTime * )
  3279. *
  3280. *   FUNCTION
  3281. *    Converts a human readable ASCII string into an AmigaDOS
  3282. *    DateStamp.
  3283. *
  3284. *   INPUTS
  3285. *    DateTime - a pointer to an initialized DateTime structure.
  3286. *
  3287. *    The DateTime structure should    be initialized as follows:
  3288. *
  3289. *    dat_Stamp  - ignored on input.
  3290. *
  3291. *    dat_Format - a format    byte which specifies the format    of the
  3292. *        dat_StrDat.  This can    be any of the following    (note:
  3293. *        If value used    is something other than    those below,
  3294. *        the default of FORMAT_DOS is used):
  3295. *
  3296. *        FORMAT_DOS:      AmigaDOS format (dd-mmm-yy).
  3297. *
  3298. *        FORMAT_INT:      International    format (yy-mmm-dd).
  3299. *
  3300. *        FORMAT_USA:      American format (mm-dd-yy).
  3301. *
  3302. *        FORMAT_CDN:      Canadian format (dd-mm-yy).
  3303. *
  3304. *    dat_Flags - a flags byte.  The only flag which affects this
  3305. *          function is:
  3306. *
  3307. *        DTB_SUBST:    ignored by this function
  3308. *        DTB_FUTURE:      If set, indicates that strings such
  3309. *                  as (stored in    dat_StrDate) "Monday"
  3310. *                  refer    to "next" monday. Otherwise,
  3311. *                  if clear, strings like "Monday"
  3312. *                  refer    to "last" monday.
  3313. *
  3314. *    dat_StrDay - ignored bythis function.
  3315. *
  3316. *    dat_StrDate -    pointer    to valid string    representing the date.
  3317. *          This can be a    "DTB_SUBST" style string such as
  3318. *          "Today" "Tomorrow" "Monday", or it may be a string
  3319. *          as specified by the dat_Format byte.    This will be
  3320. *          converted to the ds_Days portion of the DateStamp.
  3321. *          If this pointer is NULL, DateStamp->ds_Days will not
  3322. *          be affected.
  3323. *
  3324. *    dat_StrTime -    Pointer    to a buffer which contains the time in
  3325. *          the ASCII format hh:mm:ss.  This will    be converted
  3326. *          to the ds_Minutes and    ds_Ticks portions of the
  3327. *          DateStamp.  If this pointer is NULL, ds_Minutes and
  3328. *          ds_Ticks will    be unchanged.
  3329. *
  3330. *   RESULT
  3331. *    error    - a non-zero return indicates that a conversion    could
  3332. *        not be performed. A Zero return indicates that the
  3333. *        DateTime.dat_Stamp variable contains the converted
  3334. *        values.
  3335. *
  3336. *   SEE ALSO
  3337. *    DateToStr(), libraries/datetime.h
  3338. *
  3339.  
  3340.  
  3341. ================
  3342. Image Management
  3343. ================
  3344.  > BPTR LoadSeg(char *);
  3345.    Returns value in both D0 and D1, so old versions of ovs.asm will work.
  3346.    Clears unused portions of Code and Data hunks (as well as BSS hunks).
  3347.    (This also applies to InternalLoadSeg and NewLoadSeg).
  3348.  
  3349.  > void UnLoadSeg(BPTR);
  3350.  
  3351.  
  3352. ******* dos.library/NewLoadSeg ************
  3353. *
  3354. *   NAME
  3355. *    NewLoadSeg -- Improved version of LoadSeg for stacksizes
  3356. *
  3357. *   SYNOPSIS
  3358. *    seglist = NewLoadSeg(file, tags)
  3359. *    D0              D1    D2
  3360. *
  3361. *    BPTR NewLoadSeg(UBYTE *, struct TagItem *)
  3362. *
  3363. *   FUNCTION
  3364. *    Does a LoadSeg on a file, and takes additional actions based on the
  3365. *    tags supplied.
  3366. *    Clears unused portions of Code and Data hunks (as well as BSS hunks).
  3367. *    (This also applies to InternalLoadSeg and LoadSeg).
  3368. *
  3369. *   INPUTS
  3370. *    file - Filename of file to load
  3371. *    tags - pointer to tagitem array
  3372. *
  3373. *   RESULT
  3374. *    seglist - Seglist loaded, or NULL
  3375. *
  3376.  
  3377.  
  3378. ******* dos.library/InternalLoadSeg ************
  3379. *
  3380. *   NAME
  3381. *    InternalLoadSeg -- Low-level load routine
  3382. *
  3383. *   SYNOPSIS
  3384. *    seglist = InternalLoadSeg(fh,table,functionarray,stack)
  3385. *    D0              D0  A0        A1      A2
  3386. *
  3387. *    BPTR InternalLoadSeg(BPTR,BPTR,LONG *,LONG *)
  3388. *
  3389. *   FUNCTION
  3390. *    Loads from fh.  Table is used when loading an overlay, otherwise should
  3391. *    be NULL.  Functionarray is a pointer to an array of functions.  Note
  3392. *    that the current Seek position after loading may be at any point after
  3393. *    the last hunk loaded.  The filehandle will not be closed.  If a
  3394. *    stacksize is encoded in the file, the size will be stuffed in the
  3395. *    LONG pointed to by stack.  This LONG should be initialized to your
  3396. *    default value: LoadSeg will not change it if no stacksize is found.
  3397. *    Clears unused portions of Code and Data hunks (as well as BSS hunks).
  3398. *    (This also applies to LoadSeg and NewLoadSeg).
  3399. *
  3400. *    If the file being loaded is an overlaid file, this will return
  3401. *    -(seglist).  All other results will be positive.
  3402. *
  3403. *    NOTE to overlay users: InternalLoadSeg does NOT return seglist in both
  3404. *    D0 and D1, as LoadSeg does.  The current ovs.asm uses LoadSeg, and
  3405. *    assumes returns are in D1.  We will support this for LoadSeg ONLY.
  3406. *
  3407. *   INPUTS
  3408. *    fh          - Filehandle to load from.
  3409. *    table          - When loading an overlay, otherwise ignored.
  3410. *    functionarray - Array of function to be used for read, alloc, and free.
  3411. *       FuncTable[0] ->  Actual = ReadFunc(readhandle,buffer,length),DOSBase
  3412. *                    D0                D1         A0     D0      A6
  3413. *       FuncTable[1] ->  Memory = AllocFunc(size,flags), Execbase
  3414. *                    D0                 D0   D1      a6
  3415. *       FuncTable[2] ->  FreeFunc(memory,size), Execbase
  3416. *                             A1     D0     a6
  3417. *    stack         - Pointer to storage (ULONG) for stacksize.
  3418. *
  3419. *   RESULT
  3420. *    seglist          - Seglist loaded or NULL.  NOT returned in D1!
  3421. *
  3422.  
  3423.  
  3424. ******* dos.library/InternalUnLoadSeg ************
  3425. *
  3426. *   NAME
  3427. *    InternalUnLoadSeg -- Unloads a seglist loaded with InternalLoadSeg
  3428. *
  3429. *   SYNOPSIS
  3430. *    InternalUnLoadSeg(seglist,FreeFunc)
  3431. *                D1       A1
  3432. *
  3433. *    void InternalUnLoadSeg(BPTR,void (*)(char *,ULONG))
  3434. *
  3435. *   FUNCTION
  3436. *    Unloads a seglist using freefunc to free segments.  Freefunc is called
  3437. *    as for InternalLoadSeg.  NOTE: will call Close() for overlaid seglists.
  3438. *
  3439. *   INPUTS
  3440. *    FreeFunc - Function called to free memory
  3441. *
  3442. *   RESULT
  3443. *    seglist  - Seglist to be unloaded
  3444. *
  3445.  
  3446.  
  3447. AUTODOCS for AddSegment, FindSegment, RemSegment not written yet. FIX!
  3448.  
  3449.  
  3450. ===============
  3451. Command Support
  3452. ===============
  3453.  
  3454. ******* dos.library/CheckSignal ************
  3455. *
  3456. *   NAME
  3457. *    CheckSignal -- Checks for break signals
  3458. *
  3459. *   SYNOPSIS
  3460. *    signals = CheckSignal(mask)
  3461. *    D0              D1
  3462. *
  3463. *   FUNCTION
  3464. *    This function checks to see if any signals specified in the mask have
  3465. *    been set and if so, returns them.  Otherwise it returns FALSE.
  3466. *    All signals specified in mask will be cleared.
  3467. *
  3468. *   INPUTS
  3469. *    mask    - Signals to check for.
  3470. *
  3471. *   RESULT
  3472. *    signals - Signals specified in mask that were set.
  3473. *
  3474.  
  3475.  
  3476. THIS AUTODOC IS WRONG, SEE DOS/RDARGS.H.  WILL BE FIXED FOR BETA 2
  3477.  
  3478.  + Count = rdargs( "line", len, args, "template" )
  3479.      D0              A0     D0   A1       A2
  3480.  
  3481.       Where:
  3482.         "line"/len represents the user command line to be parsed.
  3483.         args is a pointer to an array of 32 bit values defined as follows:
  3484.           args[0] points to a 256 byte scratch area for use by GADS as 
  3485.                   necessary.  In the event of any error, it will contain the
  3486.                   error message to be displayed to the user upon return.
  3487.                   See below for error message formats.
  3488.           args[1..n] are use for return pointers to command results based
  3489.                      on the template
  3490.         "template" is the standard AmigaDOS template with one extra extension
  3491.                    that has become real obvious in all the commands:
  3492.                  /N indicates that the parameter is to be parsed as a 32 bit
  3493.                     integer.  (i.e. call Stcd_l for it and verify the number)
  3494.                     In addition, an enhanced version of GADS can also allow
  3495.                     numbers to appear in the form 0x0000000 or even $0000000
  3496.                     for input of hex numbers.
  3497.  
  3498.         ERROR MESSAGES:
  3499.           One thing that is VERY clear with the existing commands is that 
  3500.           there is not a consistent error message reporting nor even is
  3501.           there a consistant format for the error messages.  Even when some
  3502.           of the errors are reported, it is often somewhat cryptic.  In order
  3503.           to promote the highest level of consistancy both in AmigaDos 
  3504.           commands and in any user programs that use them we propose the
  3505.           following messages be returned:
  3506.            * For a totally bogus command line:
  3507.                Arguments for <command> do not match "<template>"
  3508.            * For an invalid numeric argument:
  3509.                Invalid number <number> for <argname>
  3510.            * For a missing keyword (/K) argument:
  3511.                Missing operand for keyword <argname>
  3512.           Additional messages should also be documented.
  3513.  
  3514.  
  3515. ******* dos.library/StrToLong ************
  3516. *
  3517. *   NAME
  3518. *    StrToLong -- string to long value (decimal)
  3519. *
  3520. *   SYNOPSIS
  3521. *    characters = StrToLong(string,value)
  3522. *    D0                      D1     D2
  3523. *
  3524. *    LONG StrToLong(UBYTE *,LONG *)
  3525. *
  3526. *   FUNCTION
  3527. *    Converts decimal string into LONG value.  Returns number of characters
  3528. *    converted.  Skips over leading spaces & tabs (included in count).  If no
  3529. *    decimal digits are found (after skipping leading spaces & tabs),
  3530. *    StrToLong returns -1 for characters converted, and puts 0 into value.
  3531. *
  3532. *   INPUTS
  3533. *    string - Input string.
  3534. *    value  - Pointer to long value.  Set to 0 if no digits are converted.
  3535. *
  3536. *   RESULT
  3537. *    result - Number of characters converted or -1.
  3538. *
  3539.  
  3540.  
  3541. ******* dos.library/MatchFirst ************
  3542. *
  3543. *   NAME
  3544. *    MatchFirst -- Finds file that matches pattern
  3545. *
  3546. *   SYNOPSIS
  3547. *    rc = MatchFirst(pat, AnchorPath)
  3548. *    D0              D0       A0
  3549. *
  3550. *    BOOL MatchFirst(UBYTE *, struct AnchorPath *)
  3551. *
  3552. *   FUNCTION
  3553. *    Locates the first file or directory that matches a given pattern.
  3554. *    This routine should support the concept of an ALL bit as well as
  3555. *    handle ^c signals gracefully.
  3556. *
  3557. *   INPUTS
  3558. *    pat        - Pattern to search for
  3559. *    AnchorPath - Place holder for search.  MUST be longword aligned!
  3560. *
  3561. *   RESULT
  3562. *    rc         - Success/failure indicator
  3563. *
  3564.  
  3565.  
  3566. ******* dos.library/MatchNext ************
  3567. *
  3568. *   NAME
  3569. *    MatchNext - Finds the next file or directory that matches pattern
  3570. *
  3571. *   SYNOPSIS
  3572. *    rc = MatchNext(AnchorPath)
  3573. *    D0                A0
  3574. *
  3575. *    BOOL MatchNext(struct AnchorPath *)
  3576. *
  3577. *   FUNCTION
  3578. *    Locates the next file or directory that matches a given pattern.
  3579. *    This routine should support the concept of an ALL bit as well as
  3580. *    handle ^c signals gracefully.  Called after calling MatchFirst().
  3581. *
  3582. *   INPUTS
  3583. *    AnchorPath - Place holder for search.  MUST be longword aligned!
  3584. *
  3585. *   RESULT
  3586. *    rc         - Success/failure indicator
  3587. *
  3588.  
  3589.  
  3590. ******* dos.library/MatchEnd ************
  3591. *
  3592. *   NAME
  3593. *    MatchEnd -- Free storage allocated for MatchFirst/MatchNext
  3594. *
  3595. *   SYNOPSIS
  3596. *    MatchEnd(AnchorPath)
  3597. *            A0
  3598. *
  3599. *    void MatchEnd(struct AnchorPath *)
  3600. *
  3601. *   FUNCTION
  3602. *    Return all storage associated with a given search.
  3603. *
  3604. *   INPUTS
  3605. *    AnchorPath - Anchor used for MatchFirst/MatchNext
  3606. *             MUST be longword aligned!
  3607. *
  3608.  
  3609.  
  3610. ******* dos.library/MatchPattern ************
  3611. *
  3612. *   NAME
  3613. *    MatchPattern --  Checks for a pattern match with a string
  3614. *
  3615. *   SYNOPSIS
  3616. *    result = MatchPattern(pat, str)
  3617. *    D0                    A0   A1
  3618. *
  3619. *    BOOL MatchPattern(UBYTE *, UBYTE *)
  3620. *
  3621. *   FUNCTION
  3622. *    Checks for a pattern match with a string.
  3623. *
  3624. *   INPUTS
  3625. *    pat    - Special pattern string to match as returned by ParsePattern
  3626. *    str    - String to match against given pattern
  3627. *
  3628. *   RESULT
  3629. *    result - Indication of match for given pattern.
  3630. *
  3631.  
  3632.  
  3633. **********************************************************************
  3634. *
  3635. *    NAME
  3636. *       ParsePattern -- Creat a tokenized string for MatchPattern
  3637. *
  3638. *    SYNOPSIS
  3639. *       IsWild = ParsePattern(Source,Dest,DestLength)
  3640. *         d0                   D1    D2     D3
  3641. *
  3642. *    FUNCTION
  3643. *
  3644. *    INPUTS
  3645. *      UBYTE *source - unparsed wildcard string to search for.
  3646. *         UBYTE *dest - output string, gets tokenized version of input.
  3647. *
  3648. *    RESULT
  3649. *      BOOL IsWild - whether there were any wildcards in the string
  3650. *    
  3651. *
  3652.  
  3653.  
  3654.  
  3655. ======================
  3656. Notification
  3657. ======================
  3658.  
  3659. ******* dos.library/StartNotify ************
  3660. *
  3661. *   NAME
  3662. *    StartNotify -- Starts notification on a file or directory
  3663. *
  3664. *   SYNOPSIS
  3665. *    rc = StartNotify(notifystructure)
  3666. *    D0            D1
  3667. *
  3668. *    BOOL StartNotify(struct NotifyRequest *)
  3669. *
  3670. *   FUNCTION
  3671. *    Posts a notification request.  Do not modify the notify structure while
  3672. *    it is active.  You will be notified when the file or directory changes.
  3673. *    For files, you will be notified after the file is closed.  Not all
  3674. *    filesystems will support this: applications should NOT require it.  In
  3675. *    particular, most network filesystems won't support it.
  3676. *
  3677. *   INPUTS
  3678. *    notifystructure - A filled in NotifyRequest structure
  3679. *
  3680. *   RESULT
  3681. *    rc              - Success/failure of request
  3682. *
  3683.  
  3684.  
  3685. ******* dos.library/EndNotify ************
  3686. *
  3687. *   NAME
  3688. *    EndNotify -- Ends a notification request
  3689. *
  3690. *   SYNOPSIS
  3691. *    EndNotify(notifystructure)
  3692. *            D1
  3693. *
  3694. *    void EndNotify(struct NotifyRequest *)
  3695. *
  3696. *   FUNCTION
  3697. *    Removes a notification request.  Safe to call even if StartNotify
  3698. *    failed.
  3699. *
  3700. *   INPUTS
  3701. *    notifystructure - a structure passed to StartNotify
  3702. *
  3703.  
  3704.  
  3705. ==============================
  3706. Variable functions
  3707. ==============================
  3708.  
  3709. ******* dos.library/DeleteVar ************
  3710. *
  3711. *   NAME
  3712. *    DeleteVar -- Deletes a local or environment variable
  3713. *
  3714. *   SYNOPSIS
  3715. *    rc = DeleteVar( name, flags ) 
  3716. *    D0         D1    D2
  3717. *
  3718. *    BOOL DeleteVar(UBYTE *, ULONG ) 
  3719. *
  3720. *   FUNCTION
  3721. *    Deletes a local or environment variable.
  3722. *
  3723. *   INPUTS
  3724. *    name   - pointer to an variable name.  Note variable names follow
  3725. *         filesystem syntax and semantics.
  3726. *    flags  - combination of type of var to delete (low 8 bits), and
  3727. *         flags to control the behavior of this routine.  Currently
  3728. *         defined flags include:
  3729. *
  3730. *         GVF_LOCAL_ONLY  - delete a local (to your process) variable.
  3731. *         GVF_GLOBAL_ONLY - delete a global environment variable.
  3732. *
  3733. *         The default is to delete a local variable if found, otherwise
  3734. *         a global environment variable if found (only for LV_VAR).
  3735. *
  3736. *   RESULT
  3737. *    rc - If TRUE, the variable was sucessfully deleted, FALSE
  3738. *        indicates failure.
  3739. *
  3740. *   BUGS
  3741. *    LV_VAR is the only type that can be global
  3742. *
  3743. *   SEE ALSO
  3744. *    GetVar(), SetVar(), libraries/var.h
  3745. *
  3746.  
  3747. ******* dos.library/FindVar ************
  3748. *
  3749. *   NAME
  3750. *    FindVar -- Finds a local variable
  3751. *
  3752. *   SYNOPSIS
  3753. *    var = DeleteVar( name, type ) 
  3754. *    D0          D1    D2
  3755. *
  3756. *    struct LocalVar * FindVar(UBYTE *, ULONG ) 
  3757. *
  3758. *   FUNCTION
  3759. *    Finds a local variable.
  3760. *
  3761. *   INPUTS
  3762. *    name - pointer to an variable name.  Note variable names follow
  3763. *           filesystem syntax and semantics.
  3764. *
  3765. *    type - type of variable to be found (see libraries/var.h)
  3766. *
  3767. *   RESULT
  3768. *
  3769. *    var  - pointer to a LocalVar structure or NULL
  3770. *
  3771. *   SEE ALSO
  3772. *    GetVar(), SetVar(), DeleteVar(), libraries/var.h
  3773. *
  3774.  
  3775.  
  3776. ******* dos.library/SetVar ************
  3777. *
  3778. *   NAME
  3779. *    SetVar -- Sets a local or environment variable
  3780. *
  3781. *   SYNOPSIS
  3782. *    rc = SetVar( name, buffer, size, flags ) 
  3783. *    D0          D1     D2     D3    D4
  3784. *
  3785. *    BOOL SetVar(UBYTE *, UBYTE *, LONG, ULONG ) 
  3786. *
  3787. *   FUNCTION
  3788. *    Sets a local or environment variable.  It is advised to only use
  3789. *    ASCII strings inside variables, but not required.
  3790. *
  3791. *   INPUTS
  3792. *    name   - pointer to an variable name.  Note variable names follow
  3793. *         filesystem syntax and semantics.
  3794. *    buffer - a user allocated area which contains a string that is the
  3795. *         value to be associated with this variable.
  3796. *    size   - length of the buffer region in bytes.  -1 means buffer contains
  3797. *         a null-terminated string.
  3798. *    flags  - combination of type of var to set (low 8 bits), and
  3799. *         flags to control the behavior of this routine.  Currently
  3800. *         defined flags include:
  3801. *
  3802. *            GVF_LOCAL_ONLY - set a local (to your process) variable.
  3803. *            GVF_GLOBAL_ONLY - set a global environment variable.
  3804. *
  3805. *        The default is to set a local environment variable.
  3806. *
  3807. *   RESULT
  3808. *
  3809. *    rc - If TRUE, the variable was sucessfully set, FALSE
  3810. *        indicates failure.
  3811. *
  3812. *   BUGS
  3813. *    LV_VAR is the only type that can be global
  3814. *
  3815. *   SEE ALSO
  3816. *    GetVar(), DeleteVar(), libraries/var.h
  3817. *
  3818.  
  3819. ******* dos.library/GetVar ************
  3820. *
  3821. *   NAME
  3822. *    GetVar -- Returns the value of a local or global variable
  3823. *
  3824. *   SYNOPSIS
  3825. *    len = GetVar( name, buffer, size, flags ) 
  3826. *    D0           D1     D2     D3    D4
  3827. *
  3828. *    LONG GetVar( UBYTE *, UBYTE *, LONG, ULONG ) 
  3829. *
  3830. *   FUNCTION
  3831. *    Gets the value of a local or environment variable.  It is advised to
  3832. *     only use ASCII strings inside variables, but not required.
  3833. *
  3834. *   INPUTS
  3835. *    name   - pointer to a variable name.
  3836. *    buffer - a user allocated area which will be used to store
  3837. *         the value associated with the variable.
  3838. *    size   - length of the buffer region in bytes.
  3839. *    flags  - combination of type of var to get value of (low 8 bits), and
  3840. *         flags to control the behavior of this routine.  Currently
  3841. *         defined flags include:
  3842. *
  3843. *            GVF_GLOBAL_ONLY - tries to get a global env variable.
  3844. *            GVF_LOCAL_ONLY  - tries to get a local variable.
  3845. *
  3846. *         The default is to try to get a local variable first, then
  3847. *         to try to get a global environment variable.
  3848. *
  3849. *   RESULT
  3850. *    len -   Size of environment variable.  -1 indicates that the
  3851. *        variable was NOT DEFINED.  If the value would overflow
  3852. *        the user buffer, the buffer is truncated.  The buffer
  3853. *        returned is null-terminated.  The actual full length of the
  3854. *        variable is returned.
  3855. *
  3856. *        (non-truncated return values range from 0 ..size-1 ).
  3857. *        It is advised to check for and ignore a trailing newline
  3858. *        character ('\n', 0x0A) in the returned buffer for textual
  3859. *        variables.
  3860. *
  3861. *   BUGS
  3862. *    LV_VAR is the only type that can be global
  3863. *
  3864. *   SEE ALSO
  3865. *    SetVar(), DeleteVar(), libraries/var.h
  3866. *
  3867.  
  3868.  
  3869.  
  3870. ******* dos.library/FilePart ************
  3871. *
  3872. *   NAME
  3873. *    FilePart -- Returns the last component of a path
  3874. *
  3875. *   SYNOPSIS
  3876. *    fileptr = FilePart( path )
  3877. *    D0             D1
  3878. *
  3879. *    UBYTE *FilePart( UBYTE * )
  3880. *
  3881. *   FUNCTION
  3882. *    This function returns a pointer to the last component of a string path
  3883. *    specification, which will normally be the file name.  If there is only
  3884. *    one component, it returns a pointer to the beginning of the string.
  3885. *
  3886. *   INPUTS
  3887. *    path - pointer to an path string.  May be relative to the current
  3888. *           directory or the current disk.
  3889. *
  3890. *   RESULT
  3891. *    fileptr - pointer to the last component of the path.
  3892. *
  3893. *   EXAMPLE
  3894. *    FilePart("xxx:yyy/zzz/qqq") would return a pointer to the first 'q'.
  3895. *    FilePart("xxx:yyy") would return a pointer to the first 'y').
  3896. *
  3897. *   SEE ALSO
  3898. *    PathName()
  3899. *
  3900.  
  3901.  
  3902. ******* dos.library/PathPart ************
  3903. *
  3904. *   NAME
  3905. *    PathPart -- Returns a pointer to the end of the next-to-last
  3906. *            component of a path.
  3907. *
  3908. *   SYNOPSIS
  3909. *    fileptr = PathPart( path )
  3910. *    D0             D1
  3911. *
  3912. *    UBYTE *PathPart( UBYTE * )
  3913. *
  3914. *   FUNCTION
  3915. *    This function returns a pointer to the character after the next-to-last
  3916. *    component of a path specification, which will normally be the directory
  3917. *    name.  If there is only one component, it returns a pointer to the
  3918. *    beginning of the string.  The only real difference between this and
  3919. *    FilePart() is the handling of '/'.
  3920. *
  3921. *   INPUTS
  3922. *    path - pointer to an path string.  May be relative to the current
  3923. *           directory or the current disk.
  3924. *
  3925. *   RESULT
  3926. *    fileptr - pointer to the end of the next-to-last component of the path.
  3927. *
  3928. *   EXAMPLE
  3929. *    PathPart("xxx:yyy/zzz/qqq") would return a pointer to the last '/'.
  3930. *    PathPart("xxx:yyy") would return a pointer to the first 'y').
  3931. *
  3932. *   SEE ALSO
  3933. *    FilePart()
  3934. *
  3935.  
  3936.  
  3937. ******* dos.library/AddPart ************
  3938. *
  3939. *   NAME
  3940. *    AddPart -- Appends a file/dir to the end of a path
  3941. *
  3942. *   SYNOPSIS
  3943. *    rc = AddPart( dirname, filename, size )
  3944. *    D0               D1        D2      D3
  3945. *
  3946. *    BOOL AddPart( UBYTE *, UBYTE *, ULONG )
  3947. *
  3948. *   FUNCTION
  3949. *    This function adds a file, directory, or subpath name to a directory
  3950. *    path name taking into account any required separator characters.
  3951. *
  3952. *   INPUTS
  3953. *    dirname  - the path to add a file/directory name to.
  3954. *    filename - the filename or directory name to add.  May be a relative
  3955. *           pathname from the current directory (example: foo/bar).
  3956. *           Can deal with leading '/'(s), indicating one directory up
  3957. *           per '/'.
  3958. *    size     - size in bytes of the space allocated for dirname.  Must
  3959. *           not be 0.
  3960. *
  3961. *   RESULT
  3962. *
  3963. *    rc - DOSTRUE for ok, FALSE if the buffer would have overflowed.  If
  3964. *         an overflow would have occured, dirname will not be changed.
  3965. *
  3966. *   BUGS
  3967. *    Doesn't check if a subpath is legal (i.e. doesn't check for ':'s).
  3968. *
  3969. *   SEE ALSO
  3970. *    Filepart(), PathPart()
  3971. *
  3972.  
  3973.